Ryujinx/Spv.Generator/Autogenerated/CoreGrammar.cs
riperiperi dd718fbe97 Pool Spv.Generator resources, cache delegates, spv opts
- Pools for Instructions and LiteralIntegers. Can be passed in when creating the generator module.
  - NewInstruction is called instead of new Instruction()
  - Ryujinx SpirvGenerator passes in some pools that are static. The idea is for these to be shared between threads eventually.
- Estimate code size when creating the output MemoryStream
- LiteralInteger pools using ThreadStatic pools that are initialized before and after creation... not sure of a better way since the way these are created is via implicit cast.

Also, cache delegates for Spv.Generator for functions that are passed around to GenerateBinary etc, since passing the function raw creates a delegate on each call.

TODO: update python spv cs generator to make the coregrammar with NewInstruction and the `params` overloads.
2022-06-17 22:42:43 +01:00

5315 lines
182 KiB
C#

// AUTOGENERATED: DO NOT EDIT
// Last update date: 2021-01-06 23:02:26.837899
#region Grammar License
// Copyright (c) 2014-2020 The Khronos Group Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and/or associated documentation files (the "Materials"),
// to deal in the Materials without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Materials, and to permit persons to whom the
// Materials are furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Materials.
//
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
//
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
// IN THE MATERIALS.
#endregion
using static Spv.Specification;
namespace Spv.Generator
{
public partial class Module
{
// Miscellaneous
public Instruction Nop()
{
Instruction result = NewInstruction(Op.OpNop);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Undef(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpUndef, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SizeOf(Instruction resultType, Instruction pointer)
{
Instruction result = NewInstruction(Op.OpSizeOf, GetNewId(), resultType);
result.AddOperand(pointer);
AddToFunctionDefinitions(result);
return result;
}
// Debug
public Instruction SourceContinued(string continuedSource)
{
Instruction result = NewInstruction(Op.OpSourceContinued);
result.AddOperand(continuedSource);
AddDebug(result);
return result;
}
public Instruction Source(SourceLanguage sourceLanguage, LiteralInteger version, Instruction file = null, string source = null)
{
Instruction result = NewInstruction(Op.OpSource);
result.AddOperand(sourceLanguage);
result.AddOperand(version);
if (file != null)
{
result.AddOperand(file);
}
if (source != null)
{
result.AddOperand(source);
}
AddDebug(result);
return result;
}
public Instruction SourceExtension(string extension)
{
Instruction result = NewInstruction(Op.OpSourceExtension);
result.AddOperand(extension);
AddDebug(result);
return result;
}
public Instruction Name(Instruction target, string name)
{
Instruction result = NewInstruction(Op.OpName);
result.AddOperand(target);
result.AddOperand(name);
AddDebug(result);
return result;
}
public Instruction MemberName(Instruction type, LiteralInteger member, string name)
{
Instruction result = NewInstruction(Op.OpMemberName);
result.AddOperand(type);
result.AddOperand(member);
result.AddOperand(name);
AddDebug(result);
return result;
}
public Instruction String(string str)
{
Instruction result = NewInstruction(Op.OpString, GetNewId());
result.AddOperand(str);
AddDebug(result);
return result;
}
public Instruction Line(Instruction file, LiteralInteger line, LiteralInteger column)
{
Instruction result = NewInstruction(Op.OpLine);
result.AddOperand(file);
result.AddOperand(line);
result.AddOperand(column);
AddDebug(result);
return result;
}
public Instruction NoLine()
{
Instruction result = NewInstruction(Op.OpNoLine);
AddDebug(result);
return result;
}
public Instruction ModuleProcessed(string process)
{
Instruction result = NewInstruction(Op.OpModuleProcessed);
result.AddOperand(process);
AddDebug(result);
return result;
}
// Annotation
public Instruction Decorate(Instruction target, Decoration decoration)
{
Instruction result = NewInstruction(Op.OpDecorate);
result.AddOperand(target);
result.AddOperand(decoration);
AddAnnotation(result);
return result;
}
public Instruction Decorate(Instruction target, Decoration decoration, Operand parameter)
{
Instruction result = NewInstruction(Op.OpDecorate);
result.AddOperand(target);
result.AddOperand(decoration);
result.AddOperand(parameter);
AddAnnotation(result);
return result;
}
public Instruction Decorate(Instruction target, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpDecorate);
result.AddOperand(target);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
public Instruction MemberDecorate(Instruction structureType, LiteralInteger member, Decoration decoration)
{
Instruction result = NewInstruction(Op.OpMemberDecorate);
result.AddOperand(structureType);
result.AddOperand(member);
result.AddOperand(decoration);
AddAnnotation(result);
return result;
}
public Instruction MemberDecorate(Instruction structureType, LiteralInteger member, Decoration decoration, Operand parameter)
{
Instruction result = NewInstruction(Op.OpMemberDecorate);
result.AddOperand(structureType);
result.AddOperand(member);
result.AddOperand(decoration);
result.AddOperand(parameter);
AddAnnotation(result);
return result;
}
public Instruction MemberDecorate(Instruction structureType, LiteralInteger member, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpMemberDecorate);
result.AddOperand(structureType);
result.AddOperand(member);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
public Instruction DecorationGroup()
{
Instruction result = NewInstruction(Op.OpDecorationGroup, GetNewId());
AddAnnotation(result);
return result;
}
public Instruction GroupDecorate(Instruction decorationGroup, params Instruction[] targets)
{
Instruction result = NewInstruction(Op.OpGroupDecorate);
result.AddOperand(decorationGroup);
result.AddOperand(targets);
AddAnnotation(result);
return result;
}
public Instruction GroupMemberDecorate(Instruction decorationGroup, params Operand[] targets)
{
Instruction result = NewInstruction(Op.OpGroupMemberDecorate);
result.AddOperand(decorationGroup);
result.AddOperand(targets);
AddAnnotation(result);
return result;
}
public Instruction DecorateId(Instruction target, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpDecorateId);
result.AddOperand(target);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
public Instruction DecorateString(Instruction target, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpDecorateString);
result.AddOperand(target);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
public Instruction DecorateStringGOOGLE(Instruction target, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpDecorateStringGOOGLE);
result.AddOperand(target);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
public Instruction MemberDecorateString(Instruction structType, LiteralInteger member, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpMemberDecorateString);
result.AddOperand(structType);
result.AddOperand(member);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
public Instruction MemberDecorateStringGOOGLE(Instruction structType, LiteralInteger member, Decoration decoration, params Operand[] parameters)
{
Instruction result = NewInstruction(Op.OpMemberDecorateStringGOOGLE);
result.AddOperand(structType);
result.AddOperand(member);
result.AddOperand(decoration);
result.AddOperand(parameters);
AddAnnotation(result);
return result;
}
// Type-Declaration
public Instruction TypeVoid(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeVoid);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeBool(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeBool);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeInt(LiteralInteger width, LiteralInteger signedness, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeInt);
result.AddOperand(width);
result.AddOperand(signedness);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeFloat(LiteralInteger width, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeFloat);
result.AddOperand(width);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeVector(Instruction componentType, LiteralInteger componentCount, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeVector);
result.AddOperand(componentType);
result.AddOperand(componentCount);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeMatrix(Instruction columnType, LiteralInteger columnCount, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeMatrix);
result.AddOperand(columnType);
result.AddOperand(columnCount);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeImage(Instruction sampledType, Dim dim, LiteralInteger depth, LiteralInteger arrayed, LiteralInteger mS, LiteralInteger sampled, ImageFormat imageFormat, AccessQualifier accessQualifier = (AccessQualifier)int.MaxValue, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeImage);
result.AddOperand(sampledType);
result.AddOperand(dim);
result.AddOperand(depth);
result.AddOperand(arrayed);
result.AddOperand(mS);
result.AddOperand(sampled);
result.AddOperand(imageFormat);
if (accessQualifier != (AccessQualifier)int.MaxValue)
{
result.AddOperand(accessQualifier);
}
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeSampler(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeSampler);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeSampledImage(Instruction imageType, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeSampledImage);
result.AddOperand(imageType);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeArray(Instruction elementType, Instruction length, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeArray);
result.AddOperand(elementType);
result.AddOperand(length);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeRuntimeArray(Instruction elementType, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeRuntimeArray);
result.AddOperand(elementType);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeStruct(bool forceIdAllocation, params Instruction[] parameters)
{
Instruction result = NewInstruction(Op.OpTypeStruct);
result.AddOperand(parameters);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeOpaque(string thenameoftheopaquetype, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeOpaque);
result.AddOperand(thenameoftheopaquetype);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypePointer(StorageClass storageClass, Instruction type, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypePointer);
result.AddOperand(storageClass);
result.AddOperand(type);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeFunction(Instruction returnType, bool forceIdAllocation, params Instruction[] parameters)
{
Instruction result = NewInstruction(Op.OpTypeFunction);
result.AddOperand(returnType);
result.AddOperand(parameters);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeEvent(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeEvent);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeDeviceEvent(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeDeviceEvent);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeReserveId(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeReserveId);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeQueue(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeQueue);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypePipe(AccessQualifier qualifier, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypePipe);
result.AddOperand(qualifier);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeForwardPointer(Instruction pointerType, StorageClass storageClass, bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeForwardPointer);
result.AddOperand(pointerType);
result.AddOperand(storageClass);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypePipeStorage(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypePipeStorage);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
public Instruction TypeNamedBarrier(bool forceIdAllocation = false)
{
Instruction result = NewInstruction(Op.OpTypeNamedBarrier);
AddTypeDeclaration(result, forceIdAllocation);
return result;
}
// Constant-Creation
public Instruction ConstantTrue(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpConstantTrue, Instruction.InvalidId, resultType);
AddConstant(result);
return result;
}
public Instruction ConstantFalse(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpConstantFalse, Instruction.InvalidId, resultType);
AddConstant(result);
return result;
}
public Instruction Constant(Instruction resultType, LiteralInteger value)
{
Instruction result = NewInstruction(Op.OpConstant, Instruction.InvalidId, resultType);
result.AddOperand(value);
AddConstant(result);
return result;
}
public Instruction ConstantComposite(Instruction resultType, params Instruction[] constituents)
{
Instruction result = NewInstruction(Op.OpConstantComposite, Instruction.InvalidId, resultType);
result.AddOperand(constituents);
AddConstant(result);
return result;
}
public Instruction ConstantSampler(Instruction resultType, SamplerAddressingMode samplerAddressingMode, LiteralInteger param, SamplerFilterMode samplerFilterMode)
{
Instruction result = NewInstruction(Op.OpConstantSampler, Instruction.InvalidId, resultType);
result.AddOperand(samplerAddressingMode);
result.AddOperand(param);
result.AddOperand(samplerFilterMode);
AddConstant(result);
return result;
}
public Instruction ConstantNull(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpConstantNull, Instruction.InvalidId, resultType);
AddConstant(result);
return result;
}
public Instruction SpecConstantTrue(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpSpecConstantTrue, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SpecConstantFalse(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpSpecConstantFalse, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SpecConstant(Instruction resultType, LiteralInteger value)
{
Instruction result = NewInstruction(Op.OpSpecConstant, GetNewId(), resultType);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SpecConstantComposite(Instruction resultType, params Instruction[] constituents)
{
Instruction result = NewInstruction(Op.OpSpecConstantComposite, GetNewId(), resultType);
result.AddOperand(constituents);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SpecConstantOp(Instruction resultType, LiteralInteger opcode)
{
Instruction result = NewInstruction(Op.OpSpecConstantOp, GetNewId(), resultType);
result.AddOperand(opcode);
AddToFunctionDefinitions(result);
return result;
}
// Memory
public Instruction Variable(Instruction resultType, StorageClass storageClass, Instruction initializer = null)
{
Instruction result = NewInstruction(Op.OpVariable, GetNewId(), resultType);
result.AddOperand(storageClass);
if (initializer != null)
{
result.AddOperand(initializer);
}
return result;
}
public Instruction ImageTexelPointer(Instruction resultType, Instruction image, Instruction coordinate, Instruction sample)
{
Instruction result = NewInstruction(Op.OpImageTexelPointer, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
result.AddOperand(sample);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Load(Instruction resultType, Instruction pointer, MemoryAccessMask memoryAccess = (MemoryAccessMask)int.MaxValue)
{
Instruction result = NewInstruction(Op.OpLoad, GetNewId(), resultType);
result.AddOperand(pointer);
if (memoryAccess != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction Store(Instruction pointer, Instruction obj, MemoryAccessMask memoryAccess = (MemoryAccessMask)int.MaxValue)
{
Instruction result = NewInstruction(Op.OpStore);
result.AddOperand(pointer);
result.AddOperand(obj);
if (memoryAccess != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction CopyMemory(Instruction target, Instruction source, MemoryAccessMask memoryAccess0 = (MemoryAccessMask)int.MaxValue, MemoryAccessMask memoryAccess1 = (MemoryAccessMask)int.MaxValue)
{
Instruction result = NewInstruction(Op.OpCopyMemory);
result.AddOperand(target);
result.AddOperand(source);
if (memoryAccess0 != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess0);
}
if (memoryAccess1 != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess1);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction CopyMemorySized(Instruction target, Instruction source, Instruction size, MemoryAccessMask memoryAccess0 = (MemoryAccessMask)int.MaxValue, MemoryAccessMask memoryAccess1 = (MemoryAccessMask)int.MaxValue)
{
Instruction result = NewInstruction(Op.OpCopyMemorySized);
result.AddOperand(target);
result.AddOperand(source);
result.AddOperand(size);
if (memoryAccess0 != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess0);
}
if (memoryAccess1 != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess1);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction AccessChain(Instruction resultType, Instruction baseObj, Instruction index)
{
Instruction result = NewInstruction(Op.OpAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(index);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AccessChain(Instruction resultType, Instruction baseObj, Instruction index0, Instruction index1)
{
Instruction result = NewInstruction(Op.OpAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(index0);
result.AddOperand(index1);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AccessChain(Instruction resultType, Instruction baseObj, Instruction index0, Instruction index1, Instruction index2)
{
Instruction result = NewInstruction(Op.OpAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(index0);
result.AddOperand(index1);
result.AddOperand(index2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AccessChain(Instruction resultType, Instruction baseObj, params Instruction[] indexes)
{
Instruction result = NewInstruction(Op.OpAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(indexes);
AddToFunctionDefinitions(result);
return result;
}
public Instruction InBoundsAccessChain(Instruction resultType, Instruction baseObj, params Instruction[] indexes)
{
Instruction result = NewInstruction(Op.OpInBoundsAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(indexes);
AddToFunctionDefinitions(result);
return result;
}
public Instruction PtrAccessChain(Instruction resultType, Instruction baseObj, Instruction element, params Instruction[] indexes)
{
Instruction result = NewInstruction(Op.OpPtrAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(element);
result.AddOperand(indexes);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ArrayLength(Instruction resultType, Instruction structure, LiteralInteger arraymember)
{
Instruction result = NewInstruction(Op.OpArrayLength, GetNewId(), resultType);
result.AddOperand(structure);
result.AddOperand(arraymember);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GenericPtrMemSemantics(Instruction resultType, Instruction pointer)
{
Instruction result = NewInstruction(Op.OpGenericPtrMemSemantics, GetNewId(), resultType);
result.AddOperand(pointer);
AddToFunctionDefinitions(result);
return result;
}
public Instruction InBoundsPtrAccessChain(Instruction resultType, Instruction baseObj, Instruction element, params Instruction[] indexes)
{
Instruction result = NewInstruction(Op.OpInBoundsPtrAccessChain, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(element);
result.AddOperand(indexes);
AddToFunctionDefinitions(result);
return result;
}
public Instruction PtrEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpPtrEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction PtrNotEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpPtrNotEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction PtrDiff(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpPtrDiff, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
// Function
public Instruction Function(Instruction resultType, FunctionControlMask functionControl, Instruction functionType)
{
Instruction result = NewInstruction(Op.OpFunction, GetNewId(), resultType);
result.AddOperand(functionControl);
result.AddOperand(functionType);
return result;
}
public void AddFunction(Instruction function)
{
AddToFunctionDefinitions(function);
}
public Instruction FunctionParameter(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpFunctionParameter, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FunctionEnd()
{
Instruction result = NewInstruction(Op.OpFunctionEnd);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FunctionCall(Instruction resultType, Instruction function, params Instruction[] parameters)
{
Instruction result = NewInstruction(Op.OpFunctionCall, GetNewId(), resultType);
result.AddOperand(function);
result.AddOperand(parameters);
AddToFunctionDefinitions(result);
return result;
}
// Image
public Instruction SampledImage(Instruction resultType, Instruction image, Instruction sampler)
{
Instruction result = NewInstruction(Op.OpSampledImage, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(sampler);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleDrefImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleDrefImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleDrefExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleDrefExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleProjImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleProjImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleProjExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleProjExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleProjDrefImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleProjDrefImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleProjDrefExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleProjDrefExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageFetch(Instruction resultType, Instruction image, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageFetch, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageGather(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction component, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageGather, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(component);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageDrefGather(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageDrefGather, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageRead(Instruction resultType, Instruction image, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageRead, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageWrite(Instruction image, Instruction coordinate, Instruction texel, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageWrite);
result.AddOperand(image);
result.AddOperand(coordinate);
result.AddOperand(texel);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction Image(Instruction resultType, Instruction sampledImage)
{
Instruction result = NewInstruction(Op.OpImage, GetNewId(), resultType);
result.AddOperand(sampledImage);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQueryFormat(Instruction resultType, Instruction image)
{
Instruction result = NewInstruction(Op.OpImageQueryFormat, GetNewId(), resultType);
result.AddOperand(image);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQueryOrder(Instruction resultType, Instruction image)
{
Instruction result = NewInstruction(Op.OpImageQueryOrder, GetNewId(), resultType);
result.AddOperand(image);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQuerySizeLod(Instruction resultType, Instruction image, Instruction levelofDetail)
{
Instruction result = NewInstruction(Op.OpImageQuerySizeLod, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(levelofDetail);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQuerySize(Instruction resultType, Instruction image)
{
Instruction result = NewInstruction(Op.OpImageQuerySize, GetNewId(), resultType);
result.AddOperand(image);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQueryLod(Instruction resultType, Instruction sampledImage, Instruction coordinate)
{
Instruction result = NewInstruction(Op.OpImageQueryLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQueryLevels(Instruction resultType, Instruction image)
{
Instruction result = NewInstruction(Op.OpImageQueryLevels, GetNewId(), resultType);
result.AddOperand(image);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageQuerySamples(Instruction resultType, Instruction image)
{
Instruction result = NewInstruction(Op.OpImageQuerySamples, GetNewId(), resultType);
result.AddOperand(image);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleDrefImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleDrefImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleDrefExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleDrefExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleProjImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleProjImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleProjExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleProjExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleProjDrefImplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleProjDrefImplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseSampleProjDrefExplicitLod(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseSampleProjDrefExplicitLod, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
result.AddOperand(imageOperands);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseFetch(Instruction resultType, Instruction image, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseFetch, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseGather(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction component, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseGather, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(component);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseDrefGather(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction dRef, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseDrefGather, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(dRef);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseTexelsResident(Instruction resultType, Instruction residentCode)
{
Instruction result = NewInstruction(Op.OpImageSparseTexelsResident, GetNewId(), resultType);
result.AddOperand(residentCode);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSparseRead(Instruction resultType, Instruction image, Instruction coordinate, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSparseRead, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction ImageSampleFootprintNV(Instruction resultType, Instruction sampledImage, Instruction coordinate, Instruction granularity, Instruction coarse, ImageOperandsMask imageOperands, params Instruction[] imageOperandIds)
{
Instruction result = NewInstruction(Op.OpImageSampleFootprintNV, GetNewId(), resultType);
result.AddOperand(sampledImage);
result.AddOperand(coordinate);
result.AddOperand(granularity);
result.AddOperand(coarse);
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperands);
}
if (imageOperands != (ImageOperandsMask)int.MaxValue)
{
result.AddOperand(imageOperandIds);
}
AddToFunctionDefinitions(result);
return result;
}
// Conversion
public Instruction ConvertFToU(Instruction resultType, Instruction floatValue)
{
Instruction result = NewInstruction(Op.OpConvertFToU, GetNewId(), resultType);
result.AddOperand(floatValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConvertFToS(Instruction resultType, Instruction floatValue)
{
Instruction result = NewInstruction(Op.OpConvertFToS, GetNewId(), resultType);
result.AddOperand(floatValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConvertSToF(Instruction resultType, Instruction signedValue)
{
Instruction result = NewInstruction(Op.OpConvertSToF, GetNewId(), resultType);
result.AddOperand(signedValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConvertUToF(Instruction resultType, Instruction unsignedValue)
{
Instruction result = NewInstruction(Op.OpConvertUToF, GetNewId(), resultType);
result.AddOperand(unsignedValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UConvert(Instruction resultType, Instruction unsignedValue)
{
Instruction result = NewInstruction(Op.OpUConvert, GetNewId(), resultType);
result.AddOperand(unsignedValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SConvert(Instruction resultType, Instruction signedValue)
{
Instruction result = NewInstruction(Op.OpSConvert, GetNewId(), resultType);
result.AddOperand(signedValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FConvert(Instruction resultType, Instruction floatValue)
{
Instruction result = NewInstruction(Op.OpFConvert, GetNewId(), resultType);
result.AddOperand(floatValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction QuantizeToF16(Instruction resultType, Instruction value)
{
Instruction result = NewInstruction(Op.OpQuantizeToF16, GetNewId(), resultType);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConvertPtrToU(Instruction resultType, Instruction pointer)
{
Instruction result = NewInstruction(Op.OpConvertPtrToU, GetNewId(), resultType);
result.AddOperand(pointer);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SatConvertSToU(Instruction resultType, Instruction signedValue)
{
Instruction result = NewInstruction(Op.OpSatConvertSToU, GetNewId(), resultType);
result.AddOperand(signedValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SatConvertUToS(Instruction resultType, Instruction unsignedValue)
{
Instruction result = NewInstruction(Op.OpSatConvertUToS, GetNewId(), resultType);
result.AddOperand(unsignedValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConvertUToPtr(Instruction resultType, Instruction integerValue)
{
Instruction result = NewInstruction(Op.OpConvertUToPtr, GetNewId(), resultType);
result.AddOperand(integerValue);
AddToFunctionDefinitions(result);
return result;
}
public Instruction PtrCastToGeneric(Instruction resultType, Instruction pointer)
{
Instruction result = NewInstruction(Op.OpPtrCastToGeneric, GetNewId(), resultType);
result.AddOperand(pointer);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GenericCastToPtr(Instruction resultType, Instruction pointer)
{
Instruction result = NewInstruction(Op.OpGenericCastToPtr, GetNewId(), resultType);
result.AddOperand(pointer);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GenericCastToPtrExplicit(Instruction resultType, Instruction pointer, StorageClass storage)
{
Instruction result = NewInstruction(Op.OpGenericCastToPtrExplicit, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(storage);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Bitcast(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpBitcast, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
// Composite
public Instruction VectorExtractDynamic(Instruction resultType, Instruction vector, Instruction index)
{
Instruction result = NewInstruction(Op.OpVectorExtractDynamic, GetNewId(), resultType);
result.AddOperand(vector);
result.AddOperand(index);
AddToFunctionDefinitions(result);
return result;
}
public Instruction VectorInsertDynamic(Instruction resultType, Instruction vector, Instruction component, Instruction index)
{
Instruction result = NewInstruction(Op.OpVectorInsertDynamic, GetNewId(), resultType);
result.AddOperand(vector);
result.AddOperand(component);
result.AddOperand(index);
AddToFunctionDefinitions(result);
return result;
}
public Instruction VectorShuffle(Instruction resultType, Instruction vector1, Instruction vector2, params LiteralInteger[] components)
{
Instruction result = NewInstruction(Op.OpVectorShuffle, GetNewId(), resultType);
result.AddOperand(vector1);
result.AddOperand(vector2);
result.AddOperand(components);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CompositeConstruct(Instruction resultType, params Instruction[] constituents)
{
Instruction result = NewInstruction(Op.OpCompositeConstruct, GetNewId(), resultType);
result.AddOperand(constituents);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CompositeExtract(Instruction resultType, Instruction composite, params LiteralInteger[] indexes)
{
Instruction result = NewInstruction(Op.OpCompositeExtract, GetNewId(), resultType);
result.AddOperand(composite);
result.AddOperand(indexes);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CompositeInsert(Instruction resultType, Instruction obj, Instruction composite, params LiteralInteger[] indexes)
{
Instruction result = NewInstruction(Op.OpCompositeInsert, GetNewId(), resultType);
result.AddOperand(obj);
result.AddOperand(composite);
result.AddOperand(indexes);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CopyObject(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpCopyObject, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Transpose(Instruction resultType, Instruction matrix)
{
Instruction result = NewInstruction(Op.OpTranspose, GetNewId(), resultType);
result.AddOperand(matrix);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CopyLogical(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpCopyLogical, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
// Arithmetic
public Instruction SNegate(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpSNegate, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FNegate(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpFNegate, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IAdd(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIAdd, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FAdd(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFAdd, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ISub(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpISub, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FSub(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFSub, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IMul(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIMul, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FMul(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFMul, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UDiv(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUDiv, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SDiv(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSDiv, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FDiv(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFDiv, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UMod(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUMod, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SRem(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSRem, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SMod(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSMod, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FRem(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFRem, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FMod(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFMod, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction VectorTimesScalar(Instruction resultType, Instruction vector, Instruction scalar)
{
Instruction result = NewInstruction(Op.OpVectorTimesScalar, GetNewId(), resultType);
result.AddOperand(vector);
result.AddOperand(scalar);
AddToFunctionDefinitions(result);
return result;
}
public Instruction MatrixTimesScalar(Instruction resultType, Instruction matrix, Instruction scalar)
{
Instruction result = NewInstruction(Op.OpMatrixTimesScalar, GetNewId(), resultType);
result.AddOperand(matrix);
result.AddOperand(scalar);
AddToFunctionDefinitions(result);
return result;
}
public Instruction VectorTimesMatrix(Instruction resultType, Instruction vector, Instruction matrix)
{
Instruction result = NewInstruction(Op.OpVectorTimesMatrix, GetNewId(), resultType);
result.AddOperand(vector);
result.AddOperand(matrix);
AddToFunctionDefinitions(result);
return result;
}
public Instruction MatrixTimesVector(Instruction resultType, Instruction matrix, Instruction vector)
{
Instruction result = NewInstruction(Op.OpMatrixTimesVector, GetNewId(), resultType);
result.AddOperand(matrix);
result.AddOperand(vector);
AddToFunctionDefinitions(result);
return result;
}
public Instruction MatrixTimesMatrix(Instruction resultType, Instruction leftMatrix, Instruction rightMatrix)
{
Instruction result = NewInstruction(Op.OpMatrixTimesMatrix, GetNewId(), resultType);
result.AddOperand(leftMatrix);
result.AddOperand(rightMatrix);
AddToFunctionDefinitions(result);
return result;
}
public Instruction OuterProduct(Instruction resultType, Instruction vector1, Instruction vector2)
{
Instruction result = NewInstruction(Op.OpOuterProduct, GetNewId(), resultType);
result.AddOperand(vector1);
result.AddOperand(vector2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Dot(Instruction resultType, Instruction vector1, Instruction vector2)
{
Instruction result = NewInstruction(Op.OpDot, GetNewId(), resultType);
result.AddOperand(vector1);
result.AddOperand(vector2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IAddCarry(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIAddCarry, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ISubBorrow(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpISubBorrow, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UMulExtended(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUMulExtended, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SMulExtended(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSMulExtended, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
// Bit
public Instruction ShiftRightLogical(Instruction resultType, Instruction baseObj, Instruction shift)
{
Instruction result = NewInstruction(Op.OpShiftRightLogical, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(shift);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ShiftRightArithmetic(Instruction resultType, Instruction baseObj, Instruction shift)
{
Instruction result = NewInstruction(Op.OpShiftRightArithmetic, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(shift);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ShiftLeftLogical(Instruction resultType, Instruction baseObj, Instruction shift)
{
Instruction result = NewInstruction(Op.OpShiftLeftLogical, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(shift);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitwiseOr(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpBitwiseOr, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitwiseXor(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpBitwiseXor, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitwiseAnd(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpBitwiseAnd, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Not(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpNot, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitFieldInsert(Instruction resultType, Instruction baseObj, Instruction insert, Instruction offset, Instruction count)
{
Instruction result = NewInstruction(Op.OpBitFieldInsert, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(insert);
result.AddOperand(offset);
result.AddOperand(count);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitFieldSExtract(Instruction resultType, Instruction baseObj, Instruction offset, Instruction count)
{
Instruction result = NewInstruction(Op.OpBitFieldSExtract, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(offset);
result.AddOperand(count);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitFieldUExtract(Instruction resultType, Instruction baseObj, Instruction offset, Instruction count)
{
Instruction result = NewInstruction(Op.OpBitFieldUExtract, GetNewId(), resultType);
result.AddOperand(baseObj);
result.AddOperand(offset);
result.AddOperand(count);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitReverse(Instruction resultType, Instruction baseObj)
{
Instruction result = NewInstruction(Op.OpBitReverse, GetNewId(), resultType);
result.AddOperand(baseObj);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BitCount(Instruction resultType, Instruction baseObj)
{
Instruction result = NewInstruction(Op.OpBitCount, GetNewId(), resultType);
result.AddOperand(baseObj);
AddToFunctionDefinitions(result);
return result;
}
// Relational_and_Logical
public Instruction Any(Instruction resultType, Instruction vector)
{
Instruction result = NewInstruction(Op.OpAny, GetNewId(), resultType);
result.AddOperand(vector);
AddToFunctionDefinitions(result);
return result;
}
public Instruction All(Instruction resultType, Instruction vector)
{
Instruction result = NewInstruction(Op.OpAll, GetNewId(), resultType);
result.AddOperand(vector);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsNan(Instruction resultType, Instruction x)
{
Instruction result = NewInstruction(Op.OpIsNan, GetNewId(), resultType);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsInf(Instruction resultType, Instruction x)
{
Instruction result = NewInstruction(Op.OpIsInf, GetNewId(), resultType);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsFinite(Instruction resultType, Instruction x)
{
Instruction result = NewInstruction(Op.OpIsFinite, GetNewId(), resultType);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsNormal(Instruction resultType, Instruction x)
{
Instruction result = NewInstruction(Op.OpIsNormal, GetNewId(), resultType);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SignBitSet(Instruction resultType, Instruction x)
{
Instruction result = NewInstruction(Op.OpSignBitSet, GetNewId(), resultType);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LessOrGreater(Instruction resultType, Instruction x, Instruction y)
{
Instruction result = NewInstruction(Op.OpLessOrGreater, GetNewId(), resultType);
result.AddOperand(x);
result.AddOperand(y);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Ordered(Instruction resultType, Instruction x, Instruction y)
{
Instruction result = NewInstruction(Op.OpOrdered, GetNewId(), resultType);
result.AddOperand(x);
result.AddOperand(y);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Unordered(Instruction resultType, Instruction x, Instruction y)
{
Instruction result = NewInstruction(Op.OpUnordered, GetNewId(), resultType);
result.AddOperand(x);
result.AddOperand(y);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LogicalEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpLogicalEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LogicalNotEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpLogicalNotEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LogicalOr(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpLogicalOr, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LogicalAnd(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpLogicalAnd, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LogicalNot(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpLogicalNot, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Select(Instruction resultType, Instruction condition, Instruction object1, Instruction object2)
{
Instruction result = NewInstruction(Op.OpSelect, GetNewId(), resultType);
result.AddOperand(condition);
result.AddOperand(object1);
result.AddOperand(object2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction INotEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpINotEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UGreaterThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUGreaterThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SGreaterThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSGreaterThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UGreaterThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUGreaterThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SGreaterThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSGreaterThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ULessThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpULessThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SLessThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSLessThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ULessThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpULessThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SLessThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpSLessThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FOrdEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFOrdEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FUnordEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFUnordEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FOrdNotEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFOrdNotEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FUnordNotEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFUnordNotEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FOrdLessThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFOrdLessThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FUnordLessThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFUnordLessThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FOrdGreaterThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFOrdGreaterThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FUnordGreaterThan(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFUnordGreaterThan, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FOrdLessThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFOrdLessThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FUnordLessThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFUnordLessThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FOrdGreaterThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFOrdGreaterThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FUnordGreaterThanEqual(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpFUnordGreaterThanEqual, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
// Derivative
public Instruction DPdx(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpDPdx, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction DPdy(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpDPdy, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Fwidth(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpFwidth, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction DPdxFine(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpDPdxFine, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction DPdyFine(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpDPdyFine, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FwidthFine(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpFwidthFine, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction DPdxCoarse(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpDPdxCoarse, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction DPdyCoarse(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpDPdyCoarse, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FwidthCoarse(Instruction resultType, Instruction p)
{
Instruction result = NewInstruction(Op.OpFwidthCoarse, GetNewId(), resultType);
result.AddOperand(p);
AddToFunctionDefinitions(result);
return result;
}
// Control-Flow
public Instruction Phi(Instruction resultType, params Instruction[] parameters)
{
Instruction result = NewInstruction(Op.OpPhi, GetNewId(), resultType);
result.AddOperand(parameters);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LoopMerge(Instruction mergeBlock, Instruction continueTarget, LoopControlMask loopControl)
{
Instruction result = NewInstruction(Op.OpLoopMerge);
result.AddOperand(mergeBlock);
result.AddOperand(continueTarget);
result.AddOperand(loopControl);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SelectionMerge(Instruction mergeBlock, SelectionControlMask selectionControl)
{
Instruction result = NewInstruction(Op.OpSelectionMerge);
result.AddOperand(mergeBlock);
result.AddOperand(selectionControl);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Label()
{
Instruction result = NewInstruction(Op.OpLabel);
return result;
}
public Instruction Branch(Instruction targetLabel)
{
Instruction result = NewInstruction(Op.OpBranch);
result.AddOperand(targetLabel);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BranchConditional(Instruction condition, Instruction trueLabel, Instruction falseLabel, params LiteralInteger[] branchweights)
{
Instruction result = NewInstruction(Op.OpBranchConditional);
result.AddOperand(condition);
result.AddOperand(trueLabel);
result.AddOperand(falseLabel);
result.AddOperand(branchweights);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Switch(Instruction selector, Instruction defaultObj, params Operand[] target)
{
Instruction result = NewInstruction(Op.OpSwitch);
result.AddOperand(selector);
result.AddOperand(defaultObj);
result.AddOperand(target);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Kill()
{
Instruction result = NewInstruction(Op.OpKill);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Return()
{
Instruction result = NewInstruction(Op.OpReturn);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReturnValue(Instruction value)
{
Instruction result = NewInstruction(Op.OpReturnValue);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction Unreachable()
{
Instruction result = NewInstruction(Op.OpUnreachable);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LifetimeStart(Instruction pointer, LiteralInteger size)
{
Instruction result = NewInstruction(Op.OpLifetimeStart);
result.AddOperand(pointer);
result.AddOperand(size);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LifetimeStop(Instruction pointer, LiteralInteger size)
{
Instruction result = NewInstruction(Op.OpLifetimeStop);
result.AddOperand(pointer);
result.AddOperand(size);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TerminateInvocation()
{
Instruction result = NewInstruction(Op.OpTerminateInvocation);
AddToFunctionDefinitions(result);
return result;
}
// Atomic
public Instruction AtomicLoad(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpAtomicLoad, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicStore(Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicStore);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicExchange(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicExchange, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicCompareExchange(Instruction resultType, Instruction pointer, Instruction memory, Instruction equal, Instruction unequal, Instruction value, Instruction comparator)
{
Instruction result = NewInstruction(Op.OpAtomicCompareExchange, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(equal);
result.AddOperand(unequal);
result.AddOperand(value);
result.AddOperand(comparator);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicCompareExchangeWeak(Instruction resultType, Instruction pointer, Instruction memory, Instruction equal, Instruction unequal, Instruction value, Instruction comparator)
{
Instruction result = NewInstruction(Op.OpAtomicCompareExchangeWeak, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(equal);
result.AddOperand(unequal);
result.AddOperand(value);
result.AddOperand(comparator);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicIIncrement(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpAtomicIIncrement, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicIDecrement(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpAtomicIDecrement, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicIAdd(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicIAdd, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicISub(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicISub, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicSMin(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicSMin, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicUMin(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicUMin, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicSMax(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicSMax, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicUMax(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicUMax, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicAnd(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicAnd, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicOr(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicOr, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicXor(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicXor, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicFlagTestAndSet(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpAtomicFlagTestAndSet, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicFlagClear(Instruction pointer, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpAtomicFlagClear);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AtomicFAddEXT(Instruction resultType, Instruction pointer, Instruction memory, Instruction semantics, Instruction value)
{
Instruction result = NewInstruction(Op.OpAtomicFAddEXT, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(memory);
result.AddOperand(semantics);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
// Primitive
public Instruction EmitVertex()
{
Instruction result = NewInstruction(Op.OpEmitVertex);
AddToFunctionDefinitions(result);
return result;
}
public Instruction EndPrimitive()
{
Instruction result = NewInstruction(Op.OpEndPrimitive);
AddToFunctionDefinitions(result);
return result;
}
public Instruction EmitStreamVertex(Instruction stream)
{
Instruction result = NewInstruction(Op.OpEmitStreamVertex);
result.AddOperand(stream);
AddToFunctionDefinitions(result);
return result;
}
public Instruction EndStreamPrimitive(Instruction stream)
{
Instruction result = NewInstruction(Op.OpEndStreamPrimitive);
result.AddOperand(stream);
AddToFunctionDefinitions(result);
return result;
}
// Barrier
public Instruction ControlBarrier(Instruction execution, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpControlBarrier);
result.AddOperand(execution);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction MemoryBarrier(Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpMemoryBarrier);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
public Instruction NamedBarrierInitialize(Instruction resultType, Instruction subgroupCount)
{
Instruction result = NewInstruction(Op.OpNamedBarrierInitialize, GetNewId(), resultType);
result.AddOperand(subgroupCount);
AddToFunctionDefinitions(result);
return result;
}
public Instruction MemoryNamedBarrier(Instruction namedBarrier, Instruction memory, Instruction semantics)
{
Instruction result = NewInstruction(Op.OpMemoryNamedBarrier);
result.AddOperand(namedBarrier);
result.AddOperand(memory);
result.AddOperand(semantics);
AddToFunctionDefinitions(result);
return result;
}
// Group
public Instruction GroupAsyncCopy(Instruction resultType, Instruction execution, Instruction destination, Instruction source, Instruction numElements, Instruction stride, Instruction eventObj)
{
Instruction result = NewInstruction(Op.OpGroupAsyncCopy, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(destination);
result.AddOperand(source);
result.AddOperand(numElements);
result.AddOperand(stride);
result.AddOperand(eventObj);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupWaitEvents(Instruction execution, Instruction numEvents, Instruction eventsList)
{
Instruction result = NewInstruction(Op.OpGroupWaitEvents);
result.AddOperand(execution);
result.AddOperand(numEvents);
result.AddOperand(eventsList);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupAll(Instruction resultType, Instruction execution, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpGroupAll, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupAny(Instruction resultType, Instruction execution, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpGroupAny, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupBroadcast(Instruction resultType, Instruction execution, Instruction value, Instruction localId)
{
Instruction result = NewInstruction(Op.OpGroupBroadcast, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(localId);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupIAdd(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupIAdd, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupFAdd(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupFAdd, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupFMin(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupFMin, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupUMin(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupUMin, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupSMin(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupSMin, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupFMax(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupFMax, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupUMax(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupUMax, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupSMax(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupSMax, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupBallotKHR(Instruction resultType, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpSubgroupBallotKHR, GetNewId(), resultType);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupFirstInvocationKHR(Instruction resultType, Instruction value)
{
Instruction result = NewInstruction(Op.OpSubgroupFirstInvocationKHR, GetNewId(), resultType);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupAllKHR(Instruction resultType, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpSubgroupAllKHR, GetNewId(), resultType);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupAnyKHR(Instruction resultType, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpSubgroupAnyKHR, GetNewId(), resultType);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupAllEqualKHR(Instruction resultType, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpSubgroupAllEqualKHR, GetNewId(), resultType);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupReadInvocationKHR(Instruction resultType, Instruction value, Instruction index)
{
Instruction result = NewInstruction(Op.OpSubgroupReadInvocationKHR, GetNewId(), resultType);
result.AddOperand(value);
result.AddOperand(index);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupIAddNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupIAddNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupFAddNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupFAddNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupFMinNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupFMinNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupUMinNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupUMinNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupSMinNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupSMinNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupFMaxNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupFMaxNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupUMaxNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupUMaxNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupSMaxNonUniformAMD(Instruction resultType, Instruction execution, GroupOperation operation, Instruction x)
{
Instruction result = NewInstruction(Op.OpGroupSMaxNonUniformAMD, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(x);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupShuffleINTEL(Instruction resultType, Instruction data, Instruction invocationId)
{
Instruction result = NewInstruction(Op.OpSubgroupShuffleINTEL, GetNewId(), resultType);
result.AddOperand(data);
result.AddOperand(invocationId);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupShuffleDownINTEL(Instruction resultType, Instruction current, Instruction next, Instruction delta)
{
Instruction result = NewInstruction(Op.OpSubgroupShuffleDownINTEL, GetNewId(), resultType);
result.AddOperand(current);
result.AddOperand(next);
result.AddOperand(delta);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupShuffleUpINTEL(Instruction resultType, Instruction previous, Instruction current, Instruction delta)
{
Instruction result = NewInstruction(Op.OpSubgroupShuffleUpINTEL, GetNewId(), resultType);
result.AddOperand(previous);
result.AddOperand(current);
result.AddOperand(delta);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupShuffleXorINTEL(Instruction resultType, Instruction data, Instruction value)
{
Instruction result = NewInstruction(Op.OpSubgroupShuffleXorINTEL, GetNewId(), resultType);
result.AddOperand(data);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupBlockReadINTEL(Instruction resultType, Instruction ptr)
{
Instruction result = NewInstruction(Op.OpSubgroupBlockReadINTEL, GetNewId(), resultType);
result.AddOperand(ptr);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupBlockWriteINTEL(Instruction ptr, Instruction data)
{
Instruction result = NewInstruction(Op.OpSubgroupBlockWriteINTEL);
result.AddOperand(ptr);
result.AddOperand(data);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupImageBlockReadINTEL(Instruction resultType, Instruction image, Instruction coordinate)
{
Instruction result = NewInstruction(Op.OpSubgroupImageBlockReadINTEL, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupImageBlockWriteINTEL(Instruction image, Instruction coordinate, Instruction data)
{
Instruction result = NewInstruction(Op.OpSubgroupImageBlockWriteINTEL);
result.AddOperand(image);
result.AddOperand(coordinate);
result.AddOperand(data);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupImageMediaBlockReadINTEL(Instruction resultType, Instruction image, Instruction coordinate, Instruction width, Instruction height)
{
Instruction result = NewInstruction(Op.OpSubgroupImageMediaBlockReadINTEL, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
result.AddOperand(width);
result.AddOperand(height);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SubgroupImageMediaBlockWriteINTEL(Instruction image, Instruction coordinate, Instruction width, Instruction height, Instruction data)
{
Instruction result = NewInstruction(Op.OpSubgroupImageMediaBlockWriteINTEL);
result.AddOperand(image);
result.AddOperand(coordinate);
result.AddOperand(width);
result.AddOperand(height);
result.AddOperand(data);
AddToFunctionDefinitions(result);
return result;
}
// Device-Side_Enqueue
public Instruction EnqueueMarker(Instruction resultType, Instruction queue, Instruction numEvents, Instruction waitEvents, Instruction retEvent)
{
Instruction result = NewInstruction(Op.OpEnqueueMarker, GetNewId(), resultType);
result.AddOperand(queue);
result.AddOperand(numEvents);
result.AddOperand(waitEvents);
result.AddOperand(retEvent);
AddToFunctionDefinitions(result);
return result;
}
public Instruction EnqueueKernel(Instruction resultType, Instruction queue, Instruction flags, Instruction nDRange, Instruction numEvents, Instruction waitEvents, Instruction retEvent, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign, params Instruction[] localSize)
{
Instruction result = NewInstruction(Op.OpEnqueueKernel, GetNewId(), resultType);
result.AddOperand(queue);
result.AddOperand(flags);
result.AddOperand(nDRange);
result.AddOperand(numEvents);
result.AddOperand(waitEvents);
result.AddOperand(retEvent);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
result.AddOperand(localSize);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetKernelNDrangeSubGroupCount(Instruction resultType, Instruction nDRange, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign)
{
Instruction result = NewInstruction(Op.OpGetKernelNDrangeSubGroupCount, GetNewId(), resultType);
result.AddOperand(nDRange);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetKernelNDrangeMaxSubGroupSize(Instruction resultType, Instruction nDRange, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign)
{
Instruction result = NewInstruction(Op.OpGetKernelNDrangeMaxSubGroupSize, GetNewId(), resultType);
result.AddOperand(nDRange);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetKernelWorkGroupSize(Instruction resultType, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign)
{
Instruction result = NewInstruction(Op.OpGetKernelWorkGroupSize, GetNewId(), resultType);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetKernelPreferredWorkGroupSizeMultiple(Instruction resultType, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign)
{
Instruction result = NewInstruction(Op.OpGetKernelPreferredWorkGroupSizeMultiple, GetNewId(), resultType);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RetainEvent(Instruction eventObj)
{
Instruction result = NewInstruction(Op.OpRetainEvent);
result.AddOperand(eventObj);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReleaseEvent(Instruction eventObj)
{
Instruction result = NewInstruction(Op.OpReleaseEvent);
result.AddOperand(eventObj);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CreateUserEvent(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpCreateUserEvent, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsValidEvent(Instruction resultType, Instruction eventObj)
{
Instruction result = NewInstruction(Op.OpIsValidEvent, GetNewId(), resultType);
result.AddOperand(eventObj);
AddToFunctionDefinitions(result);
return result;
}
public Instruction SetUserEventStatus(Instruction eventObj, Instruction status)
{
Instruction result = NewInstruction(Op.OpSetUserEventStatus);
result.AddOperand(eventObj);
result.AddOperand(status);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CaptureEventProfilingInfo(Instruction eventObj, Instruction profilingInfo, Instruction value)
{
Instruction result = NewInstruction(Op.OpCaptureEventProfilingInfo);
result.AddOperand(eventObj);
result.AddOperand(profilingInfo);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetDefaultQueue(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpGetDefaultQueue, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BuildNDRange(Instruction resultType, Instruction globalWorkSize, Instruction localWorkSize, Instruction globalWorkOffset)
{
Instruction result = NewInstruction(Op.OpBuildNDRange, GetNewId(), resultType);
result.AddOperand(globalWorkSize);
result.AddOperand(localWorkSize);
result.AddOperand(globalWorkOffset);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetKernelLocalSizeForSubgroupCount(Instruction resultType, Instruction subgroupCount, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign)
{
Instruction result = NewInstruction(Op.OpGetKernelLocalSizeForSubgroupCount, GetNewId(), resultType);
result.AddOperand(subgroupCount);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetKernelMaxNumSubgroups(Instruction resultType, Instruction invoke, Instruction param, Instruction paramSize, Instruction paramAlign)
{
Instruction result = NewInstruction(Op.OpGetKernelMaxNumSubgroups, GetNewId(), resultType);
result.AddOperand(invoke);
result.AddOperand(param);
result.AddOperand(paramSize);
result.AddOperand(paramAlign);
AddToFunctionDefinitions(result);
return result;
}
// Pipe
public Instruction ReadPipe(Instruction resultType, Instruction pipe, Instruction pointer, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpReadPipe, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(pointer);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction WritePipe(Instruction resultType, Instruction pipe, Instruction pointer, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpWritePipe, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(pointer);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReservedReadPipe(Instruction resultType, Instruction pipe, Instruction reserveId, Instruction index, Instruction pointer, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpReservedReadPipe, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(reserveId);
result.AddOperand(index);
result.AddOperand(pointer);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReservedWritePipe(Instruction resultType, Instruction pipe, Instruction reserveId, Instruction index, Instruction pointer, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpReservedWritePipe, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(reserveId);
result.AddOperand(index);
result.AddOperand(pointer);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReserveReadPipePackets(Instruction resultType, Instruction pipe, Instruction numPackets, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpReserveReadPipePackets, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(numPackets);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReserveWritePipePackets(Instruction resultType, Instruction pipe, Instruction numPackets, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpReserveWritePipePackets, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(numPackets);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CommitReadPipe(Instruction pipe, Instruction reserveId, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpCommitReadPipe);
result.AddOperand(pipe);
result.AddOperand(reserveId);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CommitWritePipe(Instruction pipe, Instruction reserveId, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpCommitWritePipe);
result.AddOperand(pipe);
result.AddOperand(reserveId);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsValidReserveId(Instruction resultType, Instruction reserveId)
{
Instruction result = NewInstruction(Op.OpIsValidReserveId, GetNewId(), resultType);
result.AddOperand(reserveId);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetNumPipePackets(Instruction resultType, Instruction pipe, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpGetNumPipePackets, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GetMaxPipePackets(Instruction resultType, Instruction pipe, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpGetMaxPipePackets, GetNewId(), resultType);
result.AddOperand(pipe);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupReserveReadPipePackets(Instruction resultType, Instruction execution, Instruction pipe, Instruction numPackets, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpGroupReserveReadPipePackets, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(pipe);
result.AddOperand(numPackets);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupReserveWritePipePackets(Instruction resultType, Instruction execution, Instruction pipe, Instruction numPackets, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpGroupReserveWritePipePackets, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(pipe);
result.AddOperand(numPackets);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupCommitReadPipe(Instruction execution, Instruction pipe, Instruction reserveId, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpGroupCommitReadPipe);
result.AddOperand(execution);
result.AddOperand(pipe);
result.AddOperand(reserveId);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupCommitWritePipe(Instruction execution, Instruction pipe, Instruction reserveId, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpGroupCommitWritePipe);
result.AddOperand(execution);
result.AddOperand(pipe);
result.AddOperand(reserveId);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConstantPipeStorage(Instruction resultType, LiteralInteger packetSize, LiteralInteger packetAlignment, LiteralInteger capacity)
{
Instruction result = NewInstruction(Op.OpConstantPipeStorage, GetNewId(), resultType);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
result.AddOperand(capacity);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CreatePipeFromPipeStorage(Instruction resultType, Instruction pipeStorage)
{
Instruction result = NewInstruction(Op.OpCreatePipeFromPipeStorage, GetNewId(), resultType);
result.AddOperand(pipeStorage);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReadPipeBlockingINTEL(Instruction resultType, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpReadPipeBlockingINTEL, GetNewId(), resultType);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
public Instruction WritePipeBlockingINTEL(Instruction resultType, Instruction packetSize, Instruction packetAlignment)
{
Instruction result = NewInstruction(Op.OpWritePipeBlockingINTEL, GetNewId(), resultType);
result.AddOperand(packetSize);
result.AddOperand(packetAlignment);
AddToFunctionDefinitions(result);
return result;
}
// Non-Uniform
public Instruction GroupNonUniformElect(Instruction resultType, Instruction execution)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformElect, GetNewId(), resultType);
result.AddOperand(execution);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformAll(Instruction resultType, Instruction execution, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformAll, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformAny(Instruction resultType, Instruction execution, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformAny, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformAllEqual(Instruction resultType, Instruction execution, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformAllEqual, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBroadcast(Instruction resultType, Instruction execution, Instruction value, Instruction id)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBroadcast, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(id);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBroadcastFirst(Instruction resultType, Instruction execution, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBroadcastFirst, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBallot(Instruction resultType, Instruction execution, Instruction predicate)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBallot, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(predicate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformInverseBallot(Instruction resultType, Instruction execution, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformInverseBallot, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBallotBitExtract(Instruction resultType, Instruction execution, Instruction value, Instruction index)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBallotBitExtract, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(index);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBallotBitCount(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBallotBitCount, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBallotFindLSB(Instruction resultType, Instruction execution, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBallotFindLSB, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBallotFindMSB(Instruction resultType, Instruction execution, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBallotFindMSB, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformShuffle(Instruction resultType, Instruction execution, Instruction value, Instruction id)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformShuffle, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(id);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformShuffleXor(Instruction resultType, Instruction execution, Instruction value, Instruction mask)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformShuffleXor, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(mask);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformShuffleUp(Instruction resultType, Instruction execution, Instruction value, Instruction delta)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformShuffleUp, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(delta);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformShuffleDown(Instruction resultType, Instruction execution, Instruction value, Instruction delta)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformShuffleDown, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(delta);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformIAdd(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformIAdd, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformFAdd(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformFAdd, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformIMul(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformIMul, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformFMul(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformFMul, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformSMin(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformSMin, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformUMin(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformUMin, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformFMin(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformFMin, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformSMax(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformSMax, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformUMax(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformUMax, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformFMax(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformFMax, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBitwiseAnd(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBitwiseAnd, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBitwiseOr(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBitwiseOr, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformBitwiseXor(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformBitwiseXor, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformLogicalAnd(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformLogicalAnd, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformLogicalOr(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformLogicalOr, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformLogicalXor(Instruction resultType, Instruction execution, GroupOperation operation, Instruction value, Instruction clusterSize = null)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformLogicalXor, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(operation);
result.AddOperand(value);
if (clusterSize != null)
{
result.AddOperand(clusterSize);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformQuadBroadcast(Instruction resultType, Instruction execution, Instruction value, Instruction index)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformQuadBroadcast, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(index);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformQuadSwap(Instruction resultType, Instruction execution, Instruction value, Instruction direction)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformQuadSwap, GetNewId(), resultType);
result.AddOperand(execution);
result.AddOperand(value);
result.AddOperand(direction);
AddToFunctionDefinitions(result);
return result;
}
public Instruction GroupNonUniformPartitionNV(Instruction resultType, Instruction value)
{
Instruction result = NewInstruction(Op.OpGroupNonUniformPartitionNV, GetNewId(), resultType);
result.AddOperand(value);
AddToFunctionDefinitions(result);
return result;
}
// Reserved
public Instruction TraceRayKHR(Instruction accel, Instruction rayFlags, Instruction cullMask, Instruction sBTOffset, Instruction sBTStride, Instruction missIndex, Instruction rayOrigin, Instruction rayTmin, Instruction rayDirection, Instruction rayTmax, Instruction payload)
{
Instruction result = NewInstruction(Op.OpTraceRayKHR);
result.AddOperand(accel);
result.AddOperand(rayFlags);
result.AddOperand(cullMask);
result.AddOperand(sBTOffset);
result.AddOperand(sBTStride);
result.AddOperand(missIndex);
result.AddOperand(rayOrigin);
result.AddOperand(rayTmin);
result.AddOperand(rayDirection);
result.AddOperand(rayTmax);
result.AddOperand(payload);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ExecuteCallableKHR(Instruction sBTIndex, Instruction callableData)
{
Instruction result = NewInstruction(Op.OpExecuteCallableKHR);
result.AddOperand(sBTIndex);
result.AddOperand(callableData);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ConvertUToAccelerationStructureKHR(Instruction resultType, Instruction accel)
{
Instruction result = NewInstruction(Op.OpConvertUToAccelerationStructureKHR, GetNewId(), resultType);
result.AddOperand(accel);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IgnoreIntersectionKHR()
{
Instruction result = NewInstruction(Op.OpIgnoreIntersectionKHR);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TerminateRayKHR()
{
Instruction result = NewInstruction(Op.OpTerminateRayKHR);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TypeRayQueryKHR()
{
Instruction result = NewInstruction(Op.OpTypeRayQueryKHR, GetNewId());
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryInitializeKHR(Instruction rayQuery, Instruction accel, Instruction rayFlags, Instruction cullMask, Instruction rayOrigin, Instruction rayTMin, Instruction rayDirection, Instruction rayTMax)
{
Instruction result = NewInstruction(Op.OpRayQueryInitializeKHR);
result.AddOperand(rayQuery);
result.AddOperand(accel);
result.AddOperand(rayFlags);
result.AddOperand(cullMask);
result.AddOperand(rayOrigin);
result.AddOperand(rayTMin);
result.AddOperand(rayDirection);
result.AddOperand(rayTMax);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryTerminateKHR(Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryTerminateKHR);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGenerateIntersectionKHR(Instruction rayQuery, Instruction hitT)
{
Instruction result = NewInstruction(Op.OpRayQueryGenerateIntersectionKHR);
result.AddOperand(rayQuery);
result.AddOperand(hitT);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryConfirmIntersectionKHR(Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryConfirmIntersectionKHR);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryProceedKHR(Instruction resultType, Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryProceedKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionTypeKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionTypeKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FragmentMaskFetchAMD(Instruction resultType, Instruction image, Instruction coordinate)
{
Instruction result = NewInstruction(Op.OpFragmentMaskFetchAMD, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FragmentFetchAMD(Instruction resultType, Instruction image, Instruction coordinate, Instruction fragmentIndex)
{
Instruction result = NewInstruction(Op.OpFragmentFetchAMD, GetNewId(), resultType);
result.AddOperand(image);
result.AddOperand(coordinate);
result.AddOperand(fragmentIndex);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReadClockKHR(Instruction resultType, Instruction execution)
{
Instruction result = NewInstruction(Op.OpReadClockKHR, GetNewId(), resultType);
result.AddOperand(execution);
AddToFunctionDefinitions(result);
return result;
}
public Instruction WritePackedPrimitiveIndices4x8NV(Instruction indexOffset, Instruction packedIndices)
{
Instruction result = NewInstruction(Op.OpWritePackedPrimitiveIndices4x8NV);
result.AddOperand(indexOffset);
result.AddOperand(packedIndices);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReportIntersectionNV(Instruction resultType, Instruction hit, Instruction hitKind)
{
Instruction result = NewInstruction(Op.OpReportIntersectionNV, GetNewId(), resultType);
result.AddOperand(hit);
result.AddOperand(hitKind);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ReportIntersectionKHR(Instruction resultType, Instruction hit, Instruction hitKind)
{
Instruction result = NewInstruction(Op.OpReportIntersectionKHR, GetNewId(), resultType);
result.AddOperand(hit);
result.AddOperand(hitKind);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IgnoreIntersectionNV()
{
Instruction result = NewInstruction(Op.OpIgnoreIntersectionNV);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TerminateRayNV()
{
Instruction result = NewInstruction(Op.OpTerminateRayNV);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TraceNV(Instruction accel, Instruction rayFlags, Instruction cullMask, Instruction sBTOffset, Instruction sBTStride, Instruction missIndex, Instruction rayOrigin, Instruction rayTmin, Instruction rayDirection, Instruction rayTmax, Instruction payloadId)
{
Instruction result = NewInstruction(Op.OpTraceNV);
result.AddOperand(accel);
result.AddOperand(rayFlags);
result.AddOperand(cullMask);
result.AddOperand(sBTOffset);
result.AddOperand(sBTStride);
result.AddOperand(missIndex);
result.AddOperand(rayOrigin);
result.AddOperand(rayTmin);
result.AddOperand(rayDirection);
result.AddOperand(rayTmax);
result.AddOperand(payloadId);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TypeAccelerationStructureNV()
{
Instruction result = NewInstruction(Op.OpTypeAccelerationStructureNV, GetNewId());
AddToFunctionDefinitions(result);
return result;
}
public Instruction TypeAccelerationStructureKHR()
{
Instruction result = NewInstruction(Op.OpTypeAccelerationStructureKHR, GetNewId());
AddToFunctionDefinitions(result);
return result;
}
public Instruction ExecuteCallableNV(Instruction sBTIndex, Instruction callableDataId)
{
Instruction result = NewInstruction(Op.OpExecuteCallableNV);
result.AddOperand(sBTIndex);
result.AddOperand(callableDataId);
AddToFunctionDefinitions(result);
return result;
}
public Instruction TypeCooperativeMatrixNV(Instruction componentType, Instruction execution, Instruction rows, Instruction columns)
{
Instruction result = NewInstruction(Op.OpTypeCooperativeMatrixNV, GetNewId());
result.AddOperand(componentType);
result.AddOperand(execution);
result.AddOperand(rows);
result.AddOperand(columns);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CooperativeMatrixLoadNV(Instruction resultType, Instruction pointer, Instruction stride, Instruction columnMajor, MemoryAccessMask memoryAccess = (MemoryAccessMask)int.MaxValue)
{
Instruction result = NewInstruction(Op.OpCooperativeMatrixLoadNV, GetNewId(), resultType);
result.AddOperand(pointer);
result.AddOperand(stride);
result.AddOperand(columnMajor);
if (memoryAccess != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction CooperativeMatrixStoreNV(Instruction pointer, Instruction obj, Instruction stride, Instruction columnMajor, MemoryAccessMask memoryAccess = (MemoryAccessMask)int.MaxValue)
{
Instruction result = NewInstruction(Op.OpCooperativeMatrixStoreNV);
result.AddOperand(pointer);
result.AddOperand(obj);
result.AddOperand(stride);
result.AddOperand(columnMajor);
if (memoryAccess != (MemoryAccessMask)int.MaxValue)
{
result.AddOperand(memoryAccess);
}
AddToFunctionDefinitions(result);
return result;
}
public Instruction CooperativeMatrixMulAddNV(Instruction resultType, Instruction a, Instruction b, Instruction c)
{
Instruction result = NewInstruction(Op.OpCooperativeMatrixMulAddNV, GetNewId(), resultType);
result.AddOperand(a);
result.AddOperand(b);
result.AddOperand(c);
AddToFunctionDefinitions(result);
return result;
}
public Instruction CooperativeMatrixLengthNV(Instruction resultType, Instruction type)
{
Instruction result = NewInstruction(Op.OpCooperativeMatrixLengthNV, GetNewId(), resultType);
result.AddOperand(type);
AddToFunctionDefinitions(result);
return result;
}
public Instruction BeginInvocationInterlockEXT()
{
Instruction result = NewInstruction(Op.OpBeginInvocationInterlockEXT);
AddToFunctionDefinitions(result);
return result;
}
public Instruction EndInvocationInterlockEXT()
{
Instruction result = NewInstruction(Op.OpEndInvocationInterlockEXT);
AddToFunctionDefinitions(result);
return result;
}
public Instruction DemoteToHelperInvocationEXT()
{
Instruction result = NewInstruction(Op.OpDemoteToHelperInvocationEXT);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IsHelperInvocationEXT(Instruction resultType)
{
Instruction result = NewInstruction(Op.OpIsHelperInvocationEXT, GetNewId(), resultType);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UCountLeadingZerosINTEL(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpUCountLeadingZerosINTEL, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UCountTrailingZerosINTEL(Instruction resultType, Instruction operand)
{
Instruction result = NewInstruction(Op.OpUCountTrailingZerosINTEL, GetNewId(), resultType);
result.AddOperand(operand);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AbsISubINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpAbsISubINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction AbsUSubINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpAbsUSubINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IAddSatINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIAddSatINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UAddSatINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUAddSatINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IAverageINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIAverageINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UAverageINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUAverageINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IAverageRoundedINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIAverageRoundedINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UAverageRoundedINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUAverageRoundedINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction ISubSatINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpISubSatINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction USubSatINTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUSubSatINTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction IMul32x16INTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpIMul32x16INTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction UMul32x16INTEL(Instruction resultType, Instruction operand1, Instruction operand2)
{
Instruction result = NewInstruction(Op.OpUMul32x16INTEL, GetNewId(), resultType);
result.AddOperand(operand1);
result.AddOperand(operand2);
AddToFunctionDefinitions(result);
return result;
}
public Instruction LoopControlINTEL(params LiteralInteger[] loopControlParameters)
{
Instruction result = NewInstruction(Op.OpLoopControlINTEL);
result.AddOperand(loopControlParameters);
AddToFunctionDefinitions(result);
return result;
}
public Instruction FPGARegINTEL(Instruction resultType, Instruction resultObj, Instruction input)
{
Instruction result = NewInstruction(Op.OpFPGARegINTEL, GetNewId(), resultType);
result.AddOperand(resultObj);
result.AddOperand(input);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetRayTMinKHR(Instruction resultType, Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryGetRayTMinKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetRayFlagsKHR(Instruction resultType, Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryGetRayFlagsKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionTKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionTKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionInstanceCustomIndexKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionInstanceCustomIndexKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionInstanceIdKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionInstanceIdKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionGeometryIndexKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionGeometryIndexKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionPrimitiveIndexKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionPrimitiveIndexKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionBarycentricsKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionBarycentricsKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionFrontFaceKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionFrontFaceKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionCandidateAABBOpaqueKHR(Instruction resultType, Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionCandidateAABBOpaqueKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionObjectRayDirectionKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionObjectRayDirectionKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionObjectRayOriginKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionObjectRayOriginKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetWorldRayDirectionKHR(Instruction resultType, Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryGetWorldRayDirectionKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetWorldRayOriginKHR(Instruction resultType, Instruction rayQuery)
{
Instruction result = NewInstruction(Op.OpRayQueryGetWorldRayOriginKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionObjectToWorldKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionObjectToWorldKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
public Instruction RayQueryGetIntersectionWorldToObjectKHR(Instruction resultType, Instruction rayQuery, Instruction intersection)
{
Instruction result = NewInstruction(Op.OpRayQueryGetIntersectionWorldToObjectKHR, GetNewId(), resultType);
result.AddOperand(rayQuery);
result.AddOperand(intersection);
AddToFunctionDefinitions(result);
return result;
}
}
}