blob: 43553203a09d184e4ef098ada999231b7349e333 [file] [log] [blame]
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_spirv_builder_and_parser.py using data from spirv.core.grammar.json.
//
// Copyright 2021 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// spirv_instruction_parser_autogen.cpp:
// Functions to parse SPIR-V binary for each instruction.
#include "spirv_instruction_parser_autogen.h"
#include <string.h>
#include "common/debug.h"
namespace angle
{
namespace spirv
{
void GetInstructionOpAndLength(const uint32_t *_instruction, spv::Op *opOut, uint32_t *lengthOut)
{
constexpr uint32_t kOpMask = 0xFFFFu;
*opOut = static_cast<spv::Op>(_instruction[0] & kOpMask);
*lengthOut = _instruction[0] >> 16;
}
void ParseUndef(const uint32_t *_instruction, IdResultType *idResultType1, IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUndef);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseSourceContinued(const uint32_t *_instruction, LiteralString *continuedSource)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSourceContinued);
uint32_t _o = 1;
ASSERT(IsLittleEndian());
*continuedSource = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*continuedSource) / 4 + 1;
}
void ParseSource(const uint32_t *_instruction,
spv::SourceLanguage *sourceLanguage1,
LiteralInteger *version,
IdRef *file,
LiteralString *source)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSource);
uint32_t _o = 1;
*sourceLanguage1 = spv::SourceLanguage(_instruction[_o++]);
*version = LiteralInteger(_instruction[_o++]);
if (file && _o < _length)
{
*file = IdRef(_instruction[_o++]);
}
if (source && _o < _length)
{
ASSERT(IsLittleEndian());
*source = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*source) / 4 + 1;
}
}
void ParseSourceExtension(const uint32_t *_instruction, LiteralString *extension)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSourceExtension);
uint32_t _o = 1;
ASSERT(IsLittleEndian());
*extension = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*extension) / 4 + 1;
}
void ParseName(const uint32_t *_instruction, IdRef *target, LiteralString *name)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpName);
uint32_t _o = 1;
*target = IdRef(_instruction[_o++]);
ASSERT(IsLittleEndian());
*name = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*name) / 4 + 1;
}
void ParseMemberName(const uint32_t *_instruction,
IdRef *type,
LiteralInteger *member,
LiteralString *name)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMemberName);
uint32_t _o = 1;
*type = IdRef(_instruction[_o++]);
*member = LiteralInteger(_instruction[_o++]);
ASSERT(IsLittleEndian());
*name = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*name) / 4 + 1;
}
void ParseString(const uint32_t *_instruction, IdResult *idResult1, LiteralString *string)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpString);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
ASSERT(IsLittleEndian());
*string = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*string) / 4 + 1;
}
void ParseLine(const uint32_t *_instruction,
IdRef *file,
LiteralInteger *line,
LiteralInteger *column)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLine);
uint32_t _o = 1;
*file = IdRef(_instruction[_o++]);
*line = LiteralInteger(_instruction[_o++]);
*column = LiteralInteger(_instruction[_o++]);
}
void ParseExtension(const uint32_t *_instruction, LiteralString *name)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpExtension);
uint32_t _o = 1;
ASSERT(IsLittleEndian());
*name = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*name) / 4 + 1;
}
void ParseExtInstImport(const uint32_t *_instruction, IdResult *idResult1, LiteralString *name)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpExtInstImport);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
ASSERT(IsLittleEndian());
*name = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*name) / 4 + 1;
}
void ParseExtInst(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *set,
LiteralExtInstInteger *instruction,
IdRefList *operandList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpExtInst);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*set = IdRef(_instruction[_o++]);
*instruction = LiteralExtInstInteger(_instruction[_o++]);
if (operandList)
{
while (_o < _length)
{
operandList->emplace_back(_instruction[_o++]);
}
}
}
void ParseMemoryModel(const uint32_t *_instruction,
spv::AddressingModel *addressingModel1,
spv::MemoryModel *memoryModel2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMemoryModel);
uint32_t _o = 1;
*addressingModel1 = spv::AddressingModel(_instruction[_o++]);
*memoryModel2 = spv::MemoryModel(_instruction[_o++]);
}
void ParseEntryPoint(const uint32_t *_instruction,
spv::ExecutionModel *executionModel1,
IdRef *entryPoint,
LiteralString *name,
IdRefList *interfaceList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpEntryPoint);
uint32_t _o = 1;
*executionModel1 = spv::ExecutionModel(_instruction[_o++]);
*entryPoint = IdRef(_instruction[_o++]);
ASSERT(IsLittleEndian());
*name = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*name) / 4 + 1;
if (interfaceList)
{
while (_o < _length)
{
interfaceList->emplace_back(_instruction[_o++]);
}
}
}
void ParseExecutionMode(const uint32_t *_instruction,
IdRef *entryPoint,
spv::ExecutionMode *mode,
LiteralIntegerList *operandsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpExecutionMode);
uint32_t _o = 1;
*entryPoint = IdRef(_instruction[_o++]);
*mode = spv::ExecutionMode(_instruction[_o++]);
if (operandsList)
{
while (_o < _length)
{
operandsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseCapability(const uint32_t *_instruction, spv::Capability *capability)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCapability);
uint32_t _o = 1;
*capability = spv::Capability(_instruction[_o++]);
}
void ParseTypeVoid(const uint32_t *_instruction, IdResult *idResult1)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeVoid);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
}
void ParseTypeBool(const uint32_t *_instruction, IdResult *idResult1)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeBool);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
}
void ParseTypeInt(const uint32_t *_instruction,
IdResult *idResult1,
LiteralInteger *width,
LiteralInteger *signedness)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeInt);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*width = LiteralInteger(_instruction[_o++]);
*signedness = LiteralInteger(_instruction[_o++]);
}
void ParseTypeFloat(const uint32_t *_instruction,
IdResult *idResult1,
LiteralInteger *width,
spv::FPEncoding *floatingPointEncoding)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeFloat);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*width = LiteralInteger(_instruction[_o++]);
if (floatingPointEncoding && _o < _length)
{
*floatingPointEncoding = spv::FPEncoding(_instruction[_o++]);
}
}
void ParseTypeVector(const uint32_t *_instruction,
IdResult *idResult1,
IdRef *componentType,
LiteralInteger *componentCount)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeVector);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*componentType = IdRef(_instruction[_o++]);
*componentCount = LiteralInteger(_instruction[_o++]);
}
void ParseTypeMatrix(const uint32_t *_instruction,
IdResult *idResult1,
IdRef *columnType,
LiteralInteger *columnCount)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeMatrix);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*columnType = IdRef(_instruction[_o++]);
*columnCount = LiteralInteger(_instruction[_o++]);
}
void ParseTypeImage(const uint32_t *_instruction,
IdResult *idResult1,
IdRef *sampledType,
spv::Dim *dim3,
LiteralInteger *depth,
LiteralInteger *arrayed,
LiteralInteger *mS,
LiteralInteger *sampled,
spv::ImageFormat *imageFormat8,
spv::AccessQualifier *accessQualifier9)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeImage);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*sampledType = IdRef(_instruction[_o++]);
*dim3 = spv::Dim(_instruction[_o++]);
*depth = LiteralInteger(_instruction[_o++]);
*arrayed = LiteralInteger(_instruction[_o++]);
*mS = LiteralInteger(_instruction[_o++]);
*sampled = LiteralInteger(_instruction[_o++]);
*imageFormat8 = spv::ImageFormat(_instruction[_o++]);
if (accessQualifier9 && _o < _length)
{
*accessQualifier9 = spv::AccessQualifier(_instruction[_o++]);
}
}
void ParseTypeSampler(const uint32_t *_instruction, IdResult *idResult1)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeSampler);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
}
void ParseTypeSampledImage(const uint32_t *_instruction, IdResult *idResult1, IdRef *imageType)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeSampledImage);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*imageType = IdRef(_instruction[_o++]);
}
void ParseTypeArray(const uint32_t *_instruction,
IdResult *idResult1,
IdRef *elementType,
IdRef *length)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeArray);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*elementType = IdRef(_instruction[_o++]);
*length = IdRef(_instruction[_o++]);
}
void ParseTypeRuntimeArray(const uint32_t *_instruction, IdResult *idResult1, IdRef *elementType)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeRuntimeArray);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*elementType = IdRef(_instruction[_o++]);
}
void ParseTypeStruct(const uint32_t *_instruction, IdResult *idResult1, IdRefList *memberList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeStruct);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
if (memberList)
{
while (_o < _length)
{
memberList->emplace_back(_instruction[_o++]);
}
}
}
void ParseTypePointer(const uint32_t *_instruction,
IdResult *idResult1,
spv::StorageClass *storageClass2,
IdRef *type)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypePointer);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*storageClass2 = spv::StorageClass(_instruction[_o++]);
*type = IdRef(_instruction[_o++]);
}
void ParseTypeFunction(const uint32_t *_instruction,
IdResult *idResult1,
IdRef *returnType,
IdRefList *parameterList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTypeFunction);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
*returnType = IdRef(_instruction[_o++]);
if (parameterList)
{
while (_o < _length)
{
parameterList->emplace_back(_instruction[_o++]);
}
}
}
void ParseConstantTrue(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConstantTrue);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseConstantFalse(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConstantFalse);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseConstant(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
LiteralContextDependentNumber *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConstant);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*value = LiteralContextDependentNumber(_instruction[_o++]);
}
void ParseConstantComposite(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRefList *constituentsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConstantComposite);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
if (constituentsList)
{
while (_o < _length)
{
constituentsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseConstantNull(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConstantNull);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseSpecConstantTrue(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSpecConstantTrue);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseSpecConstantFalse(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSpecConstantFalse);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseSpecConstant(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
LiteralContextDependentNumber *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSpecConstant);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*value = LiteralContextDependentNumber(_instruction[_o++]);
}
void ParseSpecConstantComposite(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRefList *constituentsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSpecConstantComposite);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
if (constituentsList)
{
while (_o < _length)
{
constituentsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseFunction(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
spv::FunctionControlMask *functionControl3,
IdRef *functionType)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFunction);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*functionControl3 = spv::FunctionControlMask(_instruction[_o++]);
*functionType = IdRef(_instruction[_o++]);
}
void ParseFunctionParameter(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFunctionParameter);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
}
void ParseFunctionCall(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *function,
IdRefList *argumentList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFunctionCall);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*function = IdRef(_instruction[_o++]);
if (argumentList)
{
while (_o < _length)
{
argumentList->emplace_back(_instruction[_o++]);
}
}
}
void ParseVariable(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
spv::StorageClass *storageClass3,
IdRef *initializer)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpVariable);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*storageClass3 = spv::StorageClass(_instruction[_o++]);
if (initializer && _o < _length)
{
*initializer = IdRef(_instruction[_o++]);
}
}
void ParseImageTexelPointer(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *coordinate,
IdRef *sample)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageTexelPointer);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*sample = IdRef(_instruction[_o++]);
}
void ParseLoad(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
spv::MemoryAccessMask *memoryAccess4)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLoad);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
if (memoryAccess4 && _o < _length)
{
*memoryAccess4 = spv::MemoryAccessMask(_instruction[_o++]);
}
}
void ParseStore(const uint32_t *_instruction,
IdRef *pointer,
IdRef *object,
spv::MemoryAccessMask *memoryAccess3)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpStore);
uint32_t _o = 1;
*pointer = IdRef(_instruction[_o++]);
*object = IdRef(_instruction[_o++]);
if (memoryAccess3 && _o < _length)
{
*memoryAccess3 = spv::MemoryAccessMask(_instruction[_o++]);
}
}
void ParseCopyMemory(const uint32_t *_instruction,
IdRef *target,
IdRef *source,
spv::MemoryAccessMask *memoryAccess3,
spv::MemoryAccessMask *memoryAccess4)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCopyMemory);
uint32_t _o = 1;
*target = IdRef(_instruction[_o++]);
*source = IdRef(_instruction[_o++]);
if (memoryAccess3 && _o < _length)
{
*memoryAccess3 = spv::MemoryAccessMask(_instruction[_o++]);
}
if (memoryAccess4 && _o < _length)
{
*memoryAccess4 = spv::MemoryAccessMask(_instruction[_o++]);
}
}
void ParseAccessChain(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRefList *indexesList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAccessChain);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
if (indexesList)
{
while (_o < _length)
{
indexesList->emplace_back(_instruction[_o++]);
}
}
}
void ParseInBoundsAccessChain(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRefList *indexesList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpInBoundsAccessChain);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
if (indexesList)
{
while (_o < _length)
{
indexesList->emplace_back(_instruction[_o++]);
}
}
}
void ParseArrayLength(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *structure,
LiteralInteger *arraymember)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpArrayLength);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*structure = IdRef(_instruction[_o++]);
*arraymember = LiteralInteger(_instruction[_o++]);
}
void ParseDecorate(const uint32_t *_instruction,
IdRef *target,
spv::Decoration *decoration2,
LiteralIntegerList *valuesList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDecorate);
uint32_t _o = 1;
*target = IdRef(_instruction[_o++]);
*decoration2 = spv::Decoration(_instruction[_o++]);
if (valuesList)
{
while (_o < _length)
{
valuesList->emplace_back(_instruction[_o++]);
}
}
}
void ParseMemberDecorate(const uint32_t *_instruction,
IdRef *structureType,
LiteralInteger *member,
spv::Decoration *decoration3,
LiteralIntegerList *valuesList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMemberDecorate);
uint32_t _o = 1;
*structureType = IdRef(_instruction[_o++]);
*member = LiteralInteger(_instruction[_o++]);
*decoration3 = spv::Decoration(_instruction[_o++]);
if (valuesList)
{
while (_o < _length)
{
valuesList->emplace_back(_instruction[_o++]);
}
}
}
void ParseDecorationGroup(const uint32_t *_instruction, IdResult *idResult1)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDecorationGroup);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
}
void ParseGroupDecorate(const uint32_t *_instruction,
IdRef *decorationGroup,
IdRefList *targetsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupDecorate);
uint32_t _o = 1;
*decorationGroup = IdRef(_instruction[_o++]);
if (targetsList)
{
while (_o < _length)
{
targetsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseGroupMemberDecorate(const uint32_t *_instruction,
IdRef *decorationGroup,
PairIdRefLiteralIntegerList *targetsPairList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupMemberDecorate);
uint32_t _o = 1;
*decorationGroup = IdRef(_instruction[_o++]);
if (targetsPairList)
{
while (_o < _length)
{
targetsPairList->emplace_back(PairIdRefLiteralInteger{
IdRef(_instruction[_o]), LiteralInteger(_instruction[_o + 1])});
_o += 2;
}
}
}
void ParseVectorExtractDynamic(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector,
IdRef *index)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpVectorExtractDynamic);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
*index = IdRef(_instruction[_o++]);
}
void ParseVectorInsertDynamic(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector,
IdRef *component,
IdRef *index)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpVectorInsertDynamic);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
*component = IdRef(_instruction[_o++]);
*index = IdRef(_instruction[_o++]);
}
void ParseVectorShuffle(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector1,
IdRef *vector2,
LiteralIntegerList *componentsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpVectorShuffle);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector1 = IdRef(_instruction[_o++]);
*vector2 = IdRef(_instruction[_o++]);
if (componentsList)
{
while (_o < _length)
{
componentsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseCompositeConstruct(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRefList *constituentsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCompositeConstruct);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
if (constituentsList)
{
while (_o < _length)
{
constituentsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseCompositeExtract(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *composite,
LiteralIntegerList *indexesList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCompositeExtract);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*composite = IdRef(_instruction[_o++]);
if (indexesList)
{
while (_o < _length)
{
indexesList->emplace_back(_instruction[_o++]);
}
}
}
void ParseCompositeInsert(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *object,
IdRef *composite,
LiteralIntegerList *indexesList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCompositeInsert);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*object = IdRef(_instruction[_o++]);
*composite = IdRef(_instruction[_o++]);
if (indexesList)
{
while (_o < _length)
{
indexesList->emplace_back(_instruction[_o++]);
}
}
}
void ParseCopyObject(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCopyObject);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParseTranspose(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *matrix)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpTranspose);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*matrix = IdRef(_instruction[_o++]);
}
void ParseSampledImage(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *sampler)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSampledImage);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*sampler = IdRef(_instruction[_o++]);
}
void ParseImageSampleImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleDrefImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleDrefImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleDrefExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleDrefExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleProjImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleProjImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleProjExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleProjExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleProjDrefImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleProjDrefImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSampleProjDrefExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSampleProjDrefExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageFetch(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageFetch);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageGather(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *component,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageGather);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*component = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageDrefGather(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageDrefGather);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageRead(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageRead);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageWrite(const uint32_t *_instruction,
IdRef *image,
IdRef *coordinate,
IdRef *texel,
spv::ImageOperandsMask *imageOperands4,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageWrite);
uint32_t _o = 1;
*image = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*texel = IdRef(_instruction[_o++]);
if (imageOperands4 && _o < _length)
{
*imageOperands4 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImage(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImage);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
}
void ParseImageQuerySizeLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *levelofDetail)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageQuerySizeLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*levelofDetail = IdRef(_instruction[_o++]);
}
void ParseImageQuerySize(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageQuerySize);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
}
void ParseImageQueryLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageQueryLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
}
void ParseImageQueryLevels(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageQueryLevels);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
}
void ParseImageQuerySamples(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageQuerySamples);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
}
void ParseConvertFToU(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *floatValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConvertFToU);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*floatValue = IdRef(_instruction[_o++]);
}
void ParseConvertFToS(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *floatValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConvertFToS);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*floatValue = IdRef(_instruction[_o++]);
}
void ParseConvertSToF(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *signedValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConvertSToF);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*signedValue = IdRef(_instruction[_o++]);
}
void ParseConvertUToF(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *unsignedValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpConvertUToF);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*unsignedValue = IdRef(_instruction[_o++]);
}
void ParseUConvert(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *unsignedValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUConvert);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*unsignedValue = IdRef(_instruction[_o++]);
}
void ParseSConvert(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *signedValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSConvert);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*signedValue = IdRef(_instruction[_o++]);
}
void ParseFConvert(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *floatValue)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFConvert);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*floatValue = IdRef(_instruction[_o++]);
}
void ParseQuantizeToF16(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpQuantizeToF16);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseBitcast(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitcast);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParseSNegate(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSNegate);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParseFNegate(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFNegate);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParseIAdd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpIAdd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFAdd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFAdd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseISub(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpISub);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFSub(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFSub);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseIMul(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpIMul);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFMul(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFMul);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseUDiv(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUDiv);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSDiv(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSDiv);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFDiv(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFDiv);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseUMod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUMod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSRem(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSRem);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSMod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSMod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFRem(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFRem);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFMod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFMod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseVectorTimesScalar(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector,
IdRef *scalar)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpVectorTimesScalar);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
*scalar = IdRef(_instruction[_o++]);
}
void ParseMatrixTimesScalar(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *matrix,
IdRef *scalar)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMatrixTimesScalar);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*matrix = IdRef(_instruction[_o++]);
*scalar = IdRef(_instruction[_o++]);
}
void ParseVectorTimesMatrix(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector,
IdRef *matrix)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpVectorTimesMatrix);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
*matrix = IdRef(_instruction[_o++]);
}
void ParseMatrixTimesVector(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *matrix,
IdRef *vector)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMatrixTimesVector);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*matrix = IdRef(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
}
void ParseMatrixTimesMatrix(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *leftMatrix,
IdRef *rightMatrix)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMatrixTimesMatrix);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*leftMatrix = IdRef(_instruction[_o++]);
*rightMatrix = IdRef(_instruction[_o++]);
}
void ParseOuterProduct(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector1,
IdRef *vector2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpOuterProduct);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector1 = IdRef(_instruction[_o++]);
*vector2 = IdRef(_instruction[_o++]);
}
void ParseDot(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector1,
IdRef *vector2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDot);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector1 = IdRef(_instruction[_o++]);
*vector2 = IdRef(_instruction[_o++]);
}
void ParseIAddCarry(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpIAddCarry);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseISubBorrow(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpISubBorrow);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseUMulExtended(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUMulExtended);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSMulExtended(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSMulExtended);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseAny(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAny);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
}
void ParseAll(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *vector)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAll);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*vector = IdRef(_instruction[_o++]);
}
void ParseIsNan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *x)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpIsNan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*x = IdRef(_instruction[_o++]);
}
void ParseIsInf(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *x)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpIsInf);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*x = IdRef(_instruction[_o++]);
}
void ParseLogicalEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLogicalEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseLogicalNotEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLogicalNotEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseLogicalOr(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLogicalOr);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseLogicalAnd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLogicalAnd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseLogicalNot(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLogicalNot);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParseSelect(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *condition,
IdRef *object1,
IdRef *object2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSelect);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*condition = IdRef(_instruction[_o++]);
*object1 = IdRef(_instruction[_o++]);
*object2 = IdRef(_instruction[_o++]);
}
void ParseIEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpIEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseINotEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpINotEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseUGreaterThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUGreaterThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSGreaterThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSGreaterThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseUGreaterThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpUGreaterThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSGreaterThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSGreaterThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseULessThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpULessThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSLessThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSLessThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseULessThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpULessThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseSLessThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSLessThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFOrdEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFOrdEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFUnordEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFUnordEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFOrdNotEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFOrdNotEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFUnordNotEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFUnordNotEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFOrdLessThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFOrdLessThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFUnordLessThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFUnordLessThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFOrdGreaterThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFOrdGreaterThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFUnordGreaterThan(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFUnordGreaterThan);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFOrdLessThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFOrdLessThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFUnordLessThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFUnordLessThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFOrdGreaterThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFOrdGreaterThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseFUnordGreaterThanEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFUnordGreaterThanEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseShiftRightLogical(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRef *shift)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpShiftRightLogical);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
*shift = IdRef(_instruction[_o++]);
}
void ParseShiftRightArithmetic(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRef *shift)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpShiftRightArithmetic);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
*shift = IdRef(_instruction[_o++]);
}
void ParseShiftLeftLogical(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRef *shift)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpShiftLeftLogical);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
*shift = IdRef(_instruction[_o++]);
}
void ParseBitwiseOr(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitwiseOr);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseBitwiseXor(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitwiseXor);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseBitwiseAnd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitwiseAnd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParseNot(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpNot);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParseBitFieldInsert(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRef *insert,
IdRef *offset,
IdRef *count)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitFieldInsert);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
*insert = IdRef(_instruction[_o++]);
*offset = IdRef(_instruction[_o++]);
*count = IdRef(_instruction[_o++]);
}
void ParseBitFieldSExtract(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRef *offset,
IdRef *count)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitFieldSExtract);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
*offset = IdRef(_instruction[_o++]);
*count = IdRef(_instruction[_o++]);
}
void ParseBitFieldUExtract(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base,
IdRef *offset,
IdRef *count)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitFieldUExtract);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
*offset = IdRef(_instruction[_o++]);
*count = IdRef(_instruction[_o++]);
}
void ParseBitReverse(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitReverse);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
}
void ParseBitCount(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *base)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBitCount);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*base = IdRef(_instruction[_o++]);
}
void ParseDPdx(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDPdx);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseDPdy(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDPdy);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseFwidth(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFwidth);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseDPdxFine(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDPdxFine);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseDPdyFine(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDPdyFine);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseFwidthFine(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFwidthFine);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseDPdxCoarse(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDPdxCoarse);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseDPdyCoarse(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpDPdyCoarse);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseFwidthCoarse(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *p)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpFwidthCoarse);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*p = IdRef(_instruction[_o++]);
}
void ParseEmitStreamVertex(const uint32_t *_instruction, IdRef *stream)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpEmitStreamVertex);
uint32_t _o = 1;
*stream = IdRef(_instruction[_o++]);
}
void ParseEndStreamPrimitive(const uint32_t *_instruction, IdRef *stream)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpEndStreamPrimitive);
uint32_t _o = 1;
*stream = IdRef(_instruction[_o++]);
}
void ParseControlBarrier(const uint32_t *_instruction,
IdScope *execution,
IdScope *memory,
IdMemorySemantics *semantics)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpControlBarrier);
uint32_t _o = 1;
*execution = IdScope(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
}
void ParseMemoryBarrier(const uint32_t *_instruction, IdScope *memory, IdMemorySemantics *semantics)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpMemoryBarrier);
uint32_t _o = 1;
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
}
void ParseAtomicLoad(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicLoad);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
}
void ParseAtomicStore(const uint32_t *_instruction,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicStore);
uint32_t _o = 1;
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicExchange(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicExchange);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicCompareExchange(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *equal,
IdMemorySemantics *unequal,
IdRef *value,
IdRef *comparator)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicCompareExchange);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*equal = IdMemorySemantics(_instruction[_o++]);
*unequal = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*comparator = IdRef(_instruction[_o++]);
}
void ParseAtomicIIncrement(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicIIncrement);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
}
void ParseAtomicIDecrement(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicIDecrement);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
}
void ParseAtomicIAdd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicIAdd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicISub(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicISub);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicSMin(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicSMin);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicUMin(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicUMin);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicSMax(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicSMax);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicUMax(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicUMax);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicAnd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicAnd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicOr(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicOr);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseAtomicXor(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *pointer,
IdScope *memory,
IdMemorySemantics *semantics,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpAtomicXor);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*pointer = IdRef(_instruction[_o++]);
*memory = IdScope(_instruction[_o++]);
*semantics = IdMemorySemantics(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParsePhi(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
PairIdRefIdRefList *variableParentPairList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpPhi);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
if (variableParentPairList)
{
while (_o < _length)
{
variableParentPairList->emplace_back(
PairIdRefIdRef{IdRef(_instruction[_o]), IdRef(_instruction[_o + 1])});
_o += 2;
}
}
}
void ParseLoopMerge(const uint32_t *_instruction,
IdRef *mergeBlock,
IdRef *continueTarget,
spv::LoopControlMask *loopControl3)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLoopMerge);
uint32_t _o = 1;
*mergeBlock = IdRef(_instruction[_o++]);
*continueTarget = IdRef(_instruction[_o++]);
*loopControl3 = spv::LoopControlMask(_instruction[_o++]);
}
void ParseSelectionMerge(const uint32_t *_instruction,
IdRef *mergeBlock,
spv::SelectionControlMask *selectionControl2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSelectionMerge);
uint32_t _o = 1;
*mergeBlock = IdRef(_instruction[_o++]);
*selectionControl2 = spv::SelectionControlMask(_instruction[_o++]);
}
void ParseLabel(const uint32_t *_instruction, IdResult *idResult1)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpLabel);
uint32_t _o = 1;
*idResult1 = IdResult(_instruction[_o++]);
}
void ParseBranch(const uint32_t *_instruction, IdRef *targetLabel)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBranch);
uint32_t _o = 1;
*targetLabel = IdRef(_instruction[_o++]);
}
void ParseBranchConditional(const uint32_t *_instruction,
IdRef *condition,
IdRef *trueLabel,
IdRef *falseLabel,
LiteralIntegerList *branchweightsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpBranchConditional);
uint32_t _o = 1;
*condition = IdRef(_instruction[_o++]);
*trueLabel = IdRef(_instruction[_o++]);
*falseLabel = IdRef(_instruction[_o++]);
if (branchweightsList)
{
while (_o < _length)
{
branchweightsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseSwitch(const uint32_t *_instruction,
IdRef *selector,
IdRef *default_,
PairLiteralIntegerIdRefList *targetPairList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpSwitch);
uint32_t _o = 1;
*selector = IdRef(_instruction[_o++]);
*default_ = IdRef(_instruction[_o++]);
if (targetPairList)
{
while (_o < _length)
{
targetPairList->emplace_back(PairLiteralIntegerIdRef{LiteralInteger(_instruction[_o]),
IdRef(_instruction[_o + 1])});
_o += 2;
}
}
}
void ParseReturnValue(const uint32_t *_instruction, IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpReturnValue);
uint32_t _o = 1;
*value = IdRef(_instruction[_o++]);
}
void ParseImageSparseSampleImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleDrefImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleDrefImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleDrefExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleDrefExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleProjImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleProjImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleProjExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleProjExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleProjDrefImplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleProjDrefImplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseSampleProjDrefExplicitLod(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseSampleProjDrefExplicitLod);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseFetch(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseFetch);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseGather(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *component,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseGather);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*component = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseDrefGather(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *sampledImage,
IdRef *coordinate,
IdRef *dref,
spv::ImageOperandsMask *imageOperands6,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseDrefGather);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*sampledImage = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
*dref = IdRef(_instruction[_o++]);
if (imageOperands6 && _o < _length)
{
*imageOperands6 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseImageSparseTexelsResident(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *residentCode)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseTexelsResident);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*residentCode = IdRef(_instruction[_o++]);
}
void ParseImageSparseRead(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *image,
IdRef *coordinate,
spv::ImageOperandsMask *imageOperands5,
IdRefList *imageOperandIdsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpImageSparseRead);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*image = IdRef(_instruction[_o++]);
*coordinate = IdRef(_instruction[_o++]);
if (imageOperands5 && _o < _length)
{
*imageOperands5 = spv::ImageOperandsMask(_instruction[_o++]);
}
if (imageOperandIdsList)
{
while (_o < _length)
{
imageOperandIdsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseModuleProcessed(const uint32_t *_instruction, LiteralString *process)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpModuleProcessed);
uint32_t _o = 1;
ASSERT(IsLittleEndian());
*process = reinterpret_cast<const char *>(&_instruction[_o]);
_o += strlen(*process) / 4 + 1;
}
void ParseExecutionModeId(const uint32_t *_instruction,
IdRef *entryPoint,
spv::ExecutionMode *mode,
LiteralIntegerList *operandsList)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpExecutionModeId);
uint32_t _o = 1;
*entryPoint = IdRef(_instruction[_o++]);
*mode = spv::ExecutionMode(_instruction[_o++]);
if (operandsList)
{
while (_o < _length)
{
operandsList->emplace_back(_instruction[_o++]);
}
}
}
void ParseGroupNonUniformElect(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformElect);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
}
void ParseGroupNonUniformAll(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *predicate)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformAll);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*predicate = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformAny(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *predicate)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformAny);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*predicate = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformAllEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformAllEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBroadcast(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *id)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBroadcast);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*id = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBroadcastFirst(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBroadcastFirst);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBallot(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *predicate)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBallot);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*predicate = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformInverseBallot(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformInverseBallot);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBallotBitExtract(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *index)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBallotBitExtract);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*index = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBallotBitCount(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBallotBitCount);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBallotFindLSB(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBallotFindLSB);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformBallotFindMSB(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBallotFindMSB);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformShuffle(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *id)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformShuffle);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*id = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformShuffleXor(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *mask)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformShuffleXor);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*mask = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformShuffleUp(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *delta)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformShuffleUp);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*delta = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformShuffleDown(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *delta)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformShuffleDown);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*delta = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformIAdd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformIAdd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformFAdd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformFAdd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformIMul(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformIMul);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformFMul(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformFMul);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformSMin(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformSMin);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformUMin(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformUMin);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformFMin(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformFMin);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformSMax(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformSMax);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformUMax(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformUMax);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformFMax(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformFMax);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformBitwiseAnd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBitwiseAnd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformBitwiseOr(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBitwiseOr);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformBitwiseXor(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformBitwiseXor);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformLogicalAnd(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformLogicalAnd);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformLogicalOr(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformLogicalOr);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformLogicalXor(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
spv::GroupOperation *operation,
IdRef *value,
IdRef *clusterSize)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformLogicalXor);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*operation = spv::GroupOperation(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
if (clusterSize && _o < _length)
{
*clusterSize = IdRef(_instruction[_o++]);
}
}
void ParseGroupNonUniformQuadBroadcast(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *index)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformQuadBroadcast);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*index = IdRef(_instruction[_o++]);
}
void ParseGroupNonUniformQuadSwap(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdScope *execution,
IdRef *value,
IdRef *direction)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpGroupNonUniformQuadSwap);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*execution = IdScope(_instruction[_o++]);
*value = IdRef(_instruction[_o++]);
*direction = IdRef(_instruction[_o++]);
}
void ParseCopyLogical(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpCopyLogical);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand = IdRef(_instruction[_o++]);
}
void ParsePtrEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpPtrEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
void ParsePtrNotEqual(const uint32_t *_instruction,
IdResultType *idResultType1,
IdResult *idResult2,
IdRef *operand1,
IdRef *operand2)
{
spv::Op _op;
uint32_t _length;
GetInstructionOpAndLength(_instruction, &_op, &_length);
ASSERT(_op == spv::OpPtrNotEqual);
uint32_t _o = 1;
*idResultType1 = IdResultType(_instruction[_o++]);
*idResult2 = IdResult(_instruction[_o++]);
*operand1 = IdRef(_instruction[_o++]);
*operand2 = IdRef(_instruction[_o++]);
}
} // namespace spirv
} // namespace angle