mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-28 13:56:59 +01:00
shader_recompiler: remove legacy SPIR-V emitter
This commit is contained in:
@@ -599,28 +599,6 @@ struct F32Class {
|
||||
uint32_t quiet_bits = 0;
|
||||
};
|
||||
|
||||
struct CubeF32Values {
|
||||
uint32_t x = 0;
|
||||
uint32_t y = 0;
|
||||
uint32_t z = 0;
|
||||
uint32_t nx = 0;
|
||||
uint32_t ny = 0;
|
||||
uint32_t nz = 0;
|
||||
uint32_t z_face = 0;
|
||||
uint32_t y_face = 0;
|
||||
uint32_t x_neg = 0;
|
||||
uint32_t y_neg = 0;
|
||||
uint32_t z_neg = 0;
|
||||
};
|
||||
|
||||
struct F16Class {
|
||||
uint32_t bits = 0;
|
||||
uint32_t nan = 0;
|
||||
uint32_t snan = 0;
|
||||
uint32_t zero = 0;
|
||||
uint32_t quiet_bits = 0;
|
||||
};
|
||||
|
||||
uint32_t PixelParameterMappedLocation(const EmitterState& state, uint32_t attr);
|
||||
|
||||
uint32_t PixelParameterLocation(const EmitterState& state, uint32_t attr);
|
||||
@@ -645,18 +623,8 @@ void SetError(std::string* error, const char* message);
|
||||
|
||||
void CollectRegister(std::vector<RegisterBinding>& registers, IR::Register reg);
|
||||
|
||||
IR::Operand MakeRegisterOperand(IR::RegisterFile file, uint32_t index);
|
||||
|
||||
IR::Register SccRegister();
|
||||
|
||||
IR::Operand SccOperand();
|
||||
|
||||
bool IsInactiveWave32ExecHigh(const EmitterState& state, IR::Register reg);
|
||||
|
||||
bool IsMaskRegisterFile(IR::RegisterFile file);
|
||||
|
||||
bool IsSccOperand(const IR::Operand& operand);
|
||||
|
||||
bool HasOutput(const std::vector<OutputBinding>& outputs, IR::StageOutputKind kind, uint32_t index);
|
||||
|
||||
void CopyProgramInputsAndOutputs(EmitterState& state, const IR::Program& program);
|
||||
@@ -681,12 +649,8 @@ uint32_t PointerForRegister(const EmitterState& state, IR::Register reg);
|
||||
|
||||
uint32_t ConstantU32(EmitterState& state, uint32_t value);
|
||||
|
||||
void EmitStoreU32(EmitterState& state, const IR::Operand& dst, uint32_t value);
|
||||
|
||||
uint32_t EmitSubgroupLocalInvocationId(EmitterState& state);
|
||||
|
||||
uint32_t EmitLaneIndexActiveBool(EmitterState& state, uint32_t lane);
|
||||
|
||||
[[noreturn]] void ExitDescriptorBindingFailure(const EmitterState& state,
|
||||
IR::DescriptorBindingKind kind, uint32_t resource,
|
||||
const char* reason);
|
||||
@@ -768,10 +732,6 @@ void AllocateRegisterVariables(EmitterState& state);
|
||||
|
||||
void AllocateDescriptorVariables(EmitterState& state);
|
||||
|
||||
bool SdwaSelectorOffsetWidth(uint32_t sel, uint32_t& offset, uint32_t& width);
|
||||
|
||||
uint32_t EmitSdwaExtractU32(EmitterState& state, const IR::Operand& operand, uint32_t value);
|
||||
|
||||
uint32_t EmitTrueBool(EmitterState& state);
|
||||
|
||||
DppTargetLane EmitDppQuadPermTargetLane(EmitterState& state, uint32_t subid, uint32_t control);
|
||||
@@ -785,34 +745,10 @@ DppTargetLane EmitDppMirrorTargetLane(EmitterState& state, uint32_t subid, bool
|
||||
|
||||
DppTargetLane EmitDppTargetLane(EmitterState& state, uint32_t control);
|
||||
|
||||
uint32_t EmitDppValueU32(EmitterState& state, const IR::Operand& operand, uint32_t value);
|
||||
|
||||
uint32_t EmitValueLoad(EmitterState& state, const IR::Operand& operand);
|
||||
|
||||
uint32_t EmitRegisterLoad(EmitterState& state, IR::Register reg);
|
||||
|
||||
uint32_t WaveMaskHighLoad(EmitterState& state, IR::RegisterFile file);
|
||||
|
||||
uint32_t EmitLaneMaskPartU32(EmitterState& state, uint32_t part);
|
||||
|
||||
uint32_t EmitThreadMaskBelowPartU32(EmitterState& state, uint32_t part);
|
||||
|
||||
uint32_t EmitMaskActiveBool(EmitterState& state, IR::RegisterFile file);
|
||||
|
||||
uint32_t EmitMaskZeroBool(EmitterState& state, IR::RegisterFile file, bool zero);
|
||||
|
||||
uint32_t EmitMaskSummaryZeroBool(EmitterState& state, IR::RegisterFile file, bool zero);
|
||||
|
||||
uint32_t EmitExecActiveBool(EmitterState& state);
|
||||
|
||||
uint32_t EmitConditionBool(EmitterState& state, const IR::Operand& operand);
|
||||
|
||||
uint32_t EmitSubgroupLocalInvocationId(EmitterState& state);
|
||||
|
||||
uint32_t InputVariableForKind(const EmitterState& state, IR::StageInputKind kind);
|
||||
|
||||
uint32_t InputVariableForParameter(const EmitterState& state, uint32_t location);
|
||||
|
||||
const InputBinding* InputBindingForParameter(const EmitterState& state, uint32_t location);
|
||||
|
||||
uint32_t EmitVertexParameterComponentU32(EmitterState& state, const InputBinding& input,
|
||||
@@ -822,141 +758,26 @@ uint32_t EmitInputComponentU32(EmitterState& state, IR::StageInputKind kind, uin
|
||||
|
||||
uint32_t EmitLocalInvocationIndex(EmitterState& state);
|
||||
|
||||
void EmitLoadInputF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitSccBool(EmitterState& state, bool non_zero);
|
||||
|
||||
uint32_t EmitFloatLoad(EmitterState& state, const IR::Operand& operand);
|
||||
|
||||
uint32_t ApplyResultModifiersF32(EmitterState& state, uint32_t value, const IR::Operand& dst);
|
||||
|
||||
uint32_t EmitMixF32Load(EmitterState& state, const IR::Operand& operand);
|
||||
|
||||
IR::Operand OffsetRegisterOperand(const IR::Operand& operand, uint32_t offset);
|
||||
|
||||
uint32_t EmitLaneMaskOperandActiveBool(EmitterState& state, const IR::Operand& operand);
|
||||
|
||||
uint32_t EmitBallotLaneActiveBool(EmitterState& state, uint32_t ballot, uint32_t lane);
|
||||
|
||||
uint32_t EmitLaneIndexActiveBool(EmitterState& state, uint32_t lane);
|
||||
|
||||
uint32_t EmitSubgroupLaneActiveBool(EmitterState& state, uint32_t lane);
|
||||
|
||||
uint32_t EmitSequentialValueLoad(EmitterState& state, const IR::Operand& operand, uint32_t offset);
|
||||
|
||||
uint32_t EmitSequentialFloatLoad(EmitterState& state, const IR::Operand& operand, uint32_t offset);
|
||||
|
||||
uint32_t ImageAddressHalfComponent(const IR::Instruction& inst, uint32_t component);
|
||||
|
||||
IR::Operand ImageAddressOperand(const IR::Instruction& inst, const IR::Operand& base,
|
||||
uint32_t component);
|
||||
|
||||
uint32_t EmitImageAddressValueLoad(EmitterState& state, const IR::Instruction& inst,
|
||||
const IR::Operand& base, uint32_t component);
|
||||
|
||||
uint32_t EmitImageAddressFloatLoad(EmitterState& state, const IR::Instruction& inst,
|
||||
const IR::Operand& base, uint32_t component);
|
||||
|
||||
uint32_t EmitZeroF32(EmitterState& state);
|
||||
|
||||
bool HasImageSampleFlag(const IR::Instruction& inst, uint32_t flag);
|
||||
|
||||
ImageSampleLayout MakeImageSampleLayout(const IR::Instruction& inst, ImageViewKind view);
|
||||
|
||||
uint32_t EmitImageCoordF32(EmitterState& state, const IR::Instruction& inst,
|
||||
const ImageSampleLayout& layout, ImageViewKind view);
|
||||
|
||||
uint32_t EmitImageLodF32(EmitterState& state, const IR::Instruction& inst,
|
||||
const ImageSampleLayout& layout);
|
||||
|
||||
uint32_t EmitImageDrefF32(EmitterState& state, const IR::Instruction& inst,
|
||||
const ImageSampleLayout& layout);
|
||||
|
||||
uint32_t EmitImageBiasF32(EmitterState& state, const IR::Instruction& inst,
|
||||
const ImageSampleLayout& layout);
|
||||
|
||||
uint32_t EmitImageGradientF32(EmitterState& state, const IR::Instruction& inst,
|
||||
uint32_t first_component, ImageViewKind view);
|
||||
|
||||
uint32_t EmitImagePackedOffsetI32(EmitterState& state, const IR::Instruction& inst,
|
||||
const ImageSampleLayout& layout, ImageViewKind view);
|
||||
|
||||
uint32_t EmitImageCoordU32(EmitterState& state, const IR::Instruction& inst,
|
||||
ImageViewKind view = ImageViewKind::Dim2D);
|
||||
|
||||
uint32_t EmitImageLoadCoordU32(EmitterState& state, const IR::Instruction& inst,
|
||||
ImageViewKind view);
|
||||
|
||||
uint32_t EmitImageMipLodU32(EmitterState& state, const IR::Instruction& inst,
|
||||
const IR::Operand& address, ImageViewKind view);
|
||||
|
||||
uint32_t EmitImageQueryCoordF32(EmitterState& state, const IR::Instruction& inst,
|
||||
ImageViewKind view);
|
||||
|
||||
uint32_t DmaskComponentIndex(uint32_t dmask, uint32_t component);
|
||||
|
||||
uint32_t EmitImageStoreComponentF32(EmitterState& state, const IR::Instruction& inst,
|
||||
uint32_t component);
|
||||
|
||||
uint32_t EmitImageStoreTexelF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitImageStoreTexelU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitDppWriteActiveBool(EmitterState& state, const IR::Operand& dst);
|
||||
|
||||
uint32_t EmitSdwaDestinationMerge(EmitterState& state, uint32_t pointer, const IR::Operand& dst,
|
||||
uint32_t value);
|
||||
|
||||
void EmitStoreU32(EmitterState& state, const IR::Operand& dst, uint32_t value);
|
||||
|
||||
uint32_t EmitAddU32(EmitterState& state, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
uint32_t EmitBinaryU32(EmitterState& state, uint32_t opcode, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
uint32_t EmitNotEqualZeroBool(EmitterState& state, uint32_t value);
|
||||
|
||||
uint32_t EmitSelectU32Value(EmitterState& state, uint32_t condition, uint32_t true_value,
|
||||
uint32_t false_value);
|
||||
|
||||
uint32_t EmitShaderDataDwordLoad(EmitterState& state, uint32_t dword_index);
|
||||
|
||||
bool UserDataDwordIndex(const EmitterState& state, IR::Register reg, uint32_t& dword_index);
|
||||
|
||||
uint32_t EmitByteAddress(EmitterState& state, const IR::Instruction& inst, uint32_t first_src,
|
||||
uint32_t src_count);
|
||||
|
||||
uint32_t StorageBufferPackedStride(const EmitterState& state, const IR::MemoryInfo& mem,
|
||||
uint32_t use_pc);
|
||||
|
||||
Prospero::BufferFormat StorageBufferFormat(const EmitterState& state, const IR::MemoryInfo& mem,
|
||||
uint32_t use_pc);
|
||||
|
||||
bool ShouldApplyBufferAddTid(const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitBufferIndexWithAddTid(EmitterState& state, const IR::Instruction& inst, uint32_t index,
|
||||
uint32_t packed);
|
||||
|
||||
uint32_t EmitOptionalLogicalAndBool(EmitterState& state, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
bool IsStorageBufferMemoryKind(IR::ResourceKind kind);
|
||||
|
||||
void EmitStorageBufferOffsets(EmitterState& state);
|
||||
|
||||
uint32_t EmitBufferAddressFromParts(EmitterState& state, const IR::Instruction& inst,
|
||||
uint32_t index, uint32_t offset, uint32_t soffset);
|
||||
|
||||
uint32_t EmitBufferByteAddress(EmitterState& state, const IR::Instruction& inst, uint32_t first_src,
|
||||
uint32_t src_count);
|
||||
|
||||
uint32_t EmitMemoryByteAddress(EmitterState& state, const IR::Instruction& inst,
|
||||
const IR::MemoryInfo& mem, uint32_t first_src, uint32_t src_count);
|
||||
|
||||
uint32_t EmitDwordIndex(EmitterState& state, const IR::Instruction& inst, uint32_t first_src,
|
||||
uint32_t src_count);
|
||||
|
||||
uint32_t EmitMemoryDwordIndex(EmitterState& state, const IR::Instruction& inst,
|
||||
const IR::MemoryInfo& mem, uint32_t first_src, uint32_t src_count);
|
||||
|
||||
DescriptorResourceBinding StorageBufferBindingForMemory(EmitterState& state,
|
||||
const IR::MemoryInfo& mem, uint32_t use_pc);
|
||||
|
||||
@@ -982,37 +803,6 @@ uint32_t EmitGdsElementPointer(EmitterState& state, uint32_t index);
|
||||
uint32_t EmitMemoryElementPointer(EmitterState& state, const IR::MemoryInfo& mem, uint32_t index,
|
||||
uint32_t use_pc);
|
||||
|
||||
uint32_t EmitMemoryLoadDwordValueU32(EmitterState& state, const IR::Instruction& inst,
|
||||
IR::ResourceKind kind, uint32_t first_src, uint32_t src_count);
|
||||
|
||||
void EmitMemoryLoadU32(EmitterState& state, const IR::Instruction& inst, IR::ResourceKind kind,
|
||||
uint32_t first_src, uint32_t src_count);
|
||||
|
||||
uint32_t EmitMemoryLoadSubDwordValueU32(EmitterState& state, const IR::Instruction& inst,
|
||||
IR::ResourceKind kind, uint32_t first_src,
|
||||
uint32_t src_count, uint32_t data_bits, bool sign_extend);
|
||||
|
||||
void EmitMemoryLoadSubDwordU32(EmitterState& state, const IR::Instruction& inst,
|
||||
IR::ResourceKind kind, uint32_t first_src, uint32_t src_count,
|
||||
uint32_t data_bits, bool sign_extend);
|
||||
|
||||
void EmitMemoryStoreU32(EmitterState& state, const IR::Instruction& inst, IR::ResourceKind kind,
|
||||
uint32_t first_src, uint32_t src_count);
|
||||
|
||||
void EmitMemoryStoreSubDwordU32(EmitterState& state, const IR::Instruction& inst,
|
||||
IR::ResourceKind kind, uint32_t first_src, uint32_t src_count,
|
||||
uint32_t data_bits);
|
||||
|
||||
uint32_t AddressSourceCount(const IR::Instruction& inst, uint32_t first_src);
|
||||
|
||||
bool IsFormattedBufferComponent(const IR::Instruction& inst);
|
||||
|
||||
Prospero::BufferFormat FormattedBufferFormat(const EmitterState& state,
|
||||
const IR::Instruction& inst);
|
||||
|
||||
IR::Instruction WithFormatComponentByteOffset(const IR::Instruction& inst,
|
||||
Prospero::BufferFormat format);
|
||||
|
||||
uint32_t EmitTBufferBitcastF32ToU32(EmitterState& state, uint32_t value);
|
||||
|
||||
uint32_t EmitTBufferBitcastU32ToF32(EmitterState& state, uint32_t value);
|
||||
@@ -1027,307 +817,37 @@ uint32_t EmitTBufferSelectF32(EmitterState& state, uint32_t condition, uint32_t
|
||||
|
||||
bool IsSignedFormatComponent(Format::ComponentType type);
|
||||
|
||||
uint32_t EmitExtractFormatFieldU32(EmitterState& state, uint32_t raw_word, uint32_t offset,
|
||||
uint32_t bits, bool sign_extend);
|
||||
|
||||
uint32_t EmitHalfToF32Bits(EmitterState& state, uint32_t raw);
|
||||
|
||||
uint32_t EmitUFloatToF32Bits(EmitterState& state, uint32_t raw, uint32_t bits);
|
||||
|
||||
uint32_t EmitFormatRawComponent(EmitterState& state, const IR::Instruction& inst,
|
||||
const Format::BufferFormatInfo& info);
|
||||
|
||||
uint32_t NormalizeFormatComponent(EmitterState& state, const Format::BufferFormatInfo& info,
|
||||
uint32_t component, uint32_t raw);
|
||||
|
||||
uint32_t UnpackTBufferFormat(EmitterState& state, const IR::Instruction& inst,
|
||||
const Format::BufferFormatInfo& info);
|
||||
|
||||
uint32_t FormattedBufferDwordStoreComponentCount(Prospero::BufferFormat format,
|
||||
uint32_t opcode_components);
|
||||
|
||||
bool EmitBufferIntegerFormatStore(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitAtomicPointer(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitDeviceAtomicMemoryBarrier(EmitterState& state);
|
||||
|
||||
void EmitAtomicU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitAtomicFMinF32(EmitterState& state, const IR::Instruction& inst);
|
||||
void EmitAtomicFMaxF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSLoadDword(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitLoadSrtDword(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBufferLoadUbyte(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBufferLoadSbyte(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBufferLoadUshort(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBufferLoadSshort(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBufferLoadDword(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBufferLoadDwordGroup(EmitterState& state, const IR::Instruction* instructions,
|
||||
uint32_t count);
|
||||
|
||||
void EmitBufferStoreDword(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFlatLoadUbyte(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFlatLoadSbyte(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFlatLoadUshort(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFlatLoadSshort(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFlatLoadDword(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitDsAddtidDwordIndex(EmitterState& state, const IR::Instruction& inst,
|
||||
uint32_t m0_src_index);
|
||||
|
||||
void EmitDsWriteAddtidB32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitDsReadAddtidB32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitDsAppendConsume(EmitterState& state, const IR::Instruction& inst, uint32_t atomic_opcode);
|
||||
|
||||
void EmitDsFloatMinMaxF32(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
uint32_t EmitDsSwizzleTargetLane(EmitterState& state, uint32_t subid, uint32_t control);
|
||||
|
||||
void EmitDsSwizzleB32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitImageGetResinfoComponent(EmitterState& state, uint32_t image, uint32_t size,
|
||||
uint32_t component_index);
|
||||
|
||||
void EmitImageGetResinfo(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitImageGetLod(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitImageLoad(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitImageStore(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitImageSampleResult(EmitterState& state, const IR::Instruction& inst, uint32_t sample,
|
||||
bool dref);
|
||||
|
||||
bool ImageSampleNeedsExplicitLod(const EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void AddImageSampleOperands(EmitterState& state, const IR::Instruction& inst,
|
||||
const ImageSampleLayout& layout, bool explicit_lod,
|
||||
std::vector<uint32_t>& words);
|
||||
|
||||
uint32_t ImageSampleOpcode(const EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitImageSample(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t ImageGatherComponent(uint32_t dmask);
|
||||
|
||||
void EmitImageGather4(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMoveU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMoveF32Bits(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t MoveRelRegisterLimit(const EmitterState& state, IR::Register base);
|
||||
|
||||
void EmitMoveRelSourceU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMoveRelDestU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMoveU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitWqmLaneU32(EmitterState& state, uint32_t src);
|
||||
|
||||
void EmitWqmB64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSaveexecB32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSaveexecB64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitReadFirstLaneU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitLaneIndex(EmitterState& state, const IR::Operand& operand);
|
||||
|
||||
void EmitReadLaneU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitWriteLaneU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitPermlaneB32(EmitterState& state, const IR::Instruction& inst, bool x16);
|
||||
|
||||
void EmitControlNop(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitWaitcnt(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBarrier(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitAbsI32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitUnaryU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitUnaryU64(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitFindLsbU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFindMsbFromHighU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitFindMsbFromHighU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitCountU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitCountU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitCountAddU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBinaryU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitBinaryNotRhsU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitBinaryThenNotU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitMaskedBitCountU32(EmitterState& state, const IR::Instruction& inst, uint32_t exec_index);
|
||||
|
||||
uint32_t EmitMask5U32(EmitterState& state, uint32_t value);
|
||||
|
||||
void EmitChainedBinaryU32(EmitterState& state, const IR::Instruction& inst, uint32_t first_op,
|
||||
uint32_t second_op, bool mask_first_rhs = false,
|
||||
bool mask_second_rhs = false);
|
||||
|
||||
void EmitBinaryU64(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitBinaryNotRhsU64(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitBinaryThenNotU64(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitSelectU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitSelectValueU32(EmitterState& state, uint32_t cond, uint32_t true_value,
|
||||
uint32_t false_value);
|
||||
|
||||
void EmitStoreSccBool(EmitterState& state, uint32_t cond);
|
||||
|
||||
uint32_t EmitAndConstant(EmitterState& state, uint32_t value, uint32_t mask);
|
||||
|
||||
void EmitShiftLeftLogicalU64Values(EmitterState& state, uint32_t low, uint32_t high, uint32_t shift,
|
||||
uint32_t& out_low, uint32_t& out_high);
|
||||
|
||||
void EmitShiftLeftLogicalU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitShiftRightLogicalU64Values(EmitterState& state, uint32_t low, uint32_t high,
|
||||
uint32_t shift, uint32_t& out_low, uint32_t& out_high);
|
||||
|
||||
void EmitShiftRightLogicalU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitAdd3U32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitAndConstant(EmitterState& state, uint32_t value, uint32_t mask);
|
||||
|
||||
void EmitShiftU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
uint32_t EmitU16LaneBits(EmitterState& state, const IR::Operand& operand, bool high_lane,
|
||||
bool sign_extend = false);
|
||||
|
||||
void EmitShiftU16(EmitterState& state, const IR::Instruction& inst, uint32_t opcode,
|
||||
bool arithmetic);
|
||||
|
||||
void EmitBinaryU16(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitMinMaxU16(EmitterState& state, const IR::Instruction& inst, bool signed_value,
|
||||
bool max_value);
|
||||
|
||||
uint32_t EmitXorConstant(EmitterState& state, uint32_t value, uint32_t mask);
|
||||
|
||||
AddCarryResult EmitAddCarryValues(EmitterState& state, uint32_t lhs, uint32_t rhs,
|
||||
uint32_t carry_in);
|
||||
|
||||
void EmitLaneMaskPairFromBool(EmitterState& state, const IR::Operand& dst, uint32_t value_bool);
|
||||
|
||||
void EmitPerInvocationMask(EmitterState& state, const IR::Operand& dst, uint32_t value_bool);
|
||||
|
||||
void EmitIAddCarryU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitISubBorrowU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitScalarAddCarryU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitScalarSubBorrowU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitScalarSubBorrowCarryU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitClearU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitSetU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitUMadU64U32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitScalarSignedOverflowI32(EmitterState& state, const IR::Instruction& inst, bool subtract);
|
||||
|
||||
void EmitScalarShiftLeftAddCarryU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMulU24U32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMulI24U32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMulHighU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMulHighI32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMadU32U24(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMadI32I24(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitShiftLeftConstant(EmitterState& state, uint32_t value, uint32_t shift);
|
||||
|
||||
uint32_t EmitShiftRightConstant(EmitterState& state, uint32_t value, uint32_t shift);
|
||||
|
||||
uint32_t EmitOrU32(EmitterState& state, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
uint32_t EmitBitReplicateHalfU32(EmitterState& state, uint32_t value);
|
||||
|
||||
void EmitBitReplicateB64B32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitBitFieldExtractConstant(EmitterState& state, uint32_t value, uint32_t offset,
|
||||
uint32_t count);
|
||||
|
||||
uint32_t EmitRightAlignedMaskU32(EmitterState& state, uint32_t count);
|
||||
|
||||
void EmitBitFieldMaskU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitRightAlignedMaskU64(EmitterState& state, uint32_t count, uint32_t& out_low,
|
||||
uint32_t& out_high);
|
||||
|
||||
void EmitBitFieldMaskU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitFieldExtractU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitFieldExtractU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBitFieldExtract3U32(EmitterState& state, const IR::Instruction& inst, bool signed_value);
|
||||
|
||||
void EmitBitFieldInsertSelectU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitAlignBitU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSelectU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSelectMaskU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSelectF32Bits(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitSelectMaskF32Bits(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitPackU16(EmitterState& state, const IR::Instruction& inst, bool high_src0, bool high_src1);
|
||||
|
||||
void EmitPackU8F32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBinaryF32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitLdexpF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitCompareU32Constant(EmitterState& state, uint32_t opcode, uint32_t value,
|
||||
uint32_t constant);
|
||||
|
||||
@@ -1335,25 +855,10 @@ uint32_t EmitSubConstantMinusU32(EmitterState& state, uint32_t constant, uint32_
|
||||
|
||||
uint32_t EmitF32ToF16RtzBits(EmitterState& state, uint32_t f32);
|
||||
|
||||
void EmitPackF32ToF16Rtz(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitPackNormalizedF32(EmitterState& state, const IR::Instruction& inst, uint32_t ext_inst);
|
||||
|
||||
uint32_t EmitMinMaxU32Value(EmitterState& state, uint32_t lhs, uint32_t rhs, bool max_value);
|
||||
|
||||
void EmitMinMaxU32(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
void EmitSadU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitMinMaxI32Value(EmitterState& state, uint32_t lhs, uint32_t rhs, bool max_value);
|
||||
|
||||
void EmitMinMaxI32(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
void EmitMinMax3U32(EmitterState& state, const IR::Instruction& inst, bool signed_value,
|
||||
bool max_value);
|
||||
|
||||
void EmitMed3U32(EmitterState& state, const IR::Instruction& inst, bool signed_value);
|
||||
|
||||
uint32_t EmitBitcastF32ToU32(EmitterState& state, uint32_t value);
|
||||
|
||||
uint32_t EmitBitcastU32ToF32(EmitterState& state, uint32_t value);
|
||||
@@ -1375,181 +880,18 @@ uint32_t EmitClassMaskF32(EmitterState& state, uint32_t value, uint32_t mask);
|
||||
|
||||
uint32_t EmitMinMaxF32Value(EmitterState& state, uint32_t lhs, uint32_t rhs, bool max_value);
|
||||
|
||||
void EmitMinMaxF32(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
void EmitCompareResult(EmitterState& state, const IR::Operand& dst, uint32_t cond);
|
||||
|
||||
void EmitCompareU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitCompareU16(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitCompareI16(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitBitCompareB32(EmitterState& state, const IR::Instruction& inst, bool bit_set);
|
||||
|
||||
void EmitCompareU64(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitCompareConstant(EmitterState& state, const IR::Instruction& inst, bool value);
|
||||
|
||||
void EmitCompareMaskU32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitCompareF32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitCompareOrderedF32(EmitterState& state, const IR::Instruction& inst, bool ordered);
|
||||
|
||||
void EmitCompareClassF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitCompareMaskF32(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitConvertU32ToF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertI32ToF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitTruncF32Value(EmitterState& state, uint32_t value);
|
||||
|
||||
void EmitConvertF32ToU32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertF32ToI32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertF32ToF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertF16ToF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertU16ToF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertF16ToU16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertI16ToF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertF16ToI16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertRoundPlusInfF32ToI32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertFloorF32ToI32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertI4ToOffsetF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitConvertByteU32ToF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitFlushF32DenormToSignedZero(EmitterState& state, uint32_t value);
|
||||
|
||||
void EmitRcpF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitTrigCycleF32(EmitterState& state, uint32_t src, bool preserve_signed_zero);
|
||||
|
||||
void EmitFloatExtInst(EmitterState& state, const IR::Instruction& inst, uint32_t ext_inst,
|
||||
bool scale_by_two_pi = false, bool flush_denorm = false);
|
||||
|
||||
void EmitMadF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitFNegateValue(EmitterState& state, uint32_t value);
|
||||
|
||||
uint32_t EmitFAbsValue(EmitterState& state, uint32_t value);
|
||||
|
||||
uint32_t EmitFCompareValue(EmitterState& state, uint32_t opcode, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
uint32_t EmitLogicalAndValue(EmitterState& state, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
uint32_t EmitFSelectValue(EmitterState& state, uint32_t cond, uint32_t true_value,
|
||||
uint32_t false_value);
|
||||
|
||||
uint32_t EmitFMulConstant(EmitterState& state, uint32_t value, uint32_t bits);
|
||||
|
||||
CubeF32Values EmitCubeF32Values(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitCubeIdF32(EmitterState& state, const CubeF32Values& cube);
|
||||
|
||||
uint32_t EmitCubeScF32(EmitterState& state, const CubeF32Values& cube);
|
||||
|
||||
uint32_t EmitCubeTcF32(EmitterState& state, const CubeF32Values& cube);
|
||||
|
||||
uint32_t EmitCubeMaF32(EmitterState& state, const CubeF32Values& cube);
|
||||
|
||||
void EmitCubeF32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitDot2AccF32F16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitPackedF16Lane(EmitterState& state, const IR::Operand& operand, bool high_lane);
|
||||
|
||||
void EmitCompareF16(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
uint32_t EmitPackedF16LaneBits(EmitterState& state, const IR::Operand& operand, bool high_lane);
|
||||
|
||||
uint32_t EmitF16BitsToF32(EmitterState& state, uint32_t bits);
|
||||
|
||||
uint32_t EmitPackLowF32ToF16Bits(EmitterState& state, uint32_t value);
|
||||
|
||||
void EmitPackB32F16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
F16Class EmitClassifyF16Bits(EmitterState& state, uint32_t value);
|
||||
|
||||
uint32_t EmitNegativeNumericF16Bool(EmitterState& state, const F16Class& cls);
|
||||
|
||||
uint32_t EmitRcpF16Bits(EmitterState& state, uint32_t bits);
|
||||
|
||||
uint32_t EmitSqrtF16Bits(EmitterState& state, uint32_t bits);
|
||||
|
||||
uint32_t EmitRsqF16Bits(EmitterState& state, uint32_t bits);
|
||||
|
||||
uint32_t EmitLog2F16Bits(EmitterState& state, uint32_t bits);
|
||||
|
||||
uint32_t EmitExp2F16Bits(EmitterState& state, uint32_t bits);
|
||||
|
||||
void EmitSpecialF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitBinaryF16(EmitterState& state, const IR::Instruction& inst, uint32_t opcode);
|
||||
|
||||
void EmitFmaF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitMinMaxF16Bits(EmitterState& state, uint32_t lhs, uint32_t rhs, bool max_value);
|
||||
|
||||
void EmitMinMaxF16(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
uint32_t EmitMinMax3F16Bits(EmitterState& state, uint32_t src0, uint32_t src1, uint32_t src2,
|
||||
bool max_value);
|
||||
|
||||
void EmitMinMax3F16(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
uint32_t EmitF16BitsEqualBool(EmitterState& state, uint32_t lhs, uint32_t rhs);
|
||||
|
||||
uint32_t EmitAnyNanF16Bool(EmitterState& state, uint32_t src0, uint32_t src1, uint32_t src2);
|
||||
|
||||
void EmitMed3F16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitPackedMinMaxF16(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
uint32_t EmitPackedF16BinaryLane(EmitterState& state, const IR::Instruction& inst, bool high_lane,
|
||||
uint32_t opcode);
|
||||
|
||||
uint32_t EmitPackedF16FmaLane(EmitterState& state, const IR::Instruction& inst, bool high_lane);
|
||||
|
||||
void EmitPackedF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitPackedInteger16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMadMixF16(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitMinMax3F32(EmitterState& state, const IR::Instruction& inst, bool max_value);
|
||||
|
||||
void EmitMed3F32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
uint32_t EmitExportComponentF32(EmitterState& state, const IR::Instruction& inst,
|
||||
uint32_t component);
|
||||
|
||||
uint32_t EmitExportVec4F32(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
bool ExportWritesData(const IR::Instruction& inst);
|
||||
|
||||
void EmitExport(EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
bool ExportUsesPixelValidMask(const EmitterState& state, const IR::Instruction& inst);
|
||||
|
||||
void EmitKillIfBoolFalse(EmitterState& state, uint32_t active);
|
||||
|
||||
void EmitUpdatePixelValidMask(EmitterState& state);
|
||||
|
||||
void EmitKillIfPixelValidMaskInactive(EmitterState& state);
|
||||
|
||||
uint32_t InitialRegisterValue(const EmitterState& state, IR::Register reg);
|
||||
|
||||
bool EmitValueAlu(ValueEmitContext& ctx, const IR::Inst& inst);
|
||||
@@ -1613,19 +955,6 @@ uint32_t EmitValueOrZeroIfCondition(EmitterState& state, uint32_t condition, Fn&
|
||||
std::forward<Fn>(fn));
|
||||
}
|
||||
|
||||
template <typename Fn>
|
||||
void EmitGuardedByExec(EmitterState& state, Fn&& fn) {
|
||||
const auto then_label = state.builder.AllocateId();
|
||||
const auto merge_label = state.builder.AllocateId();
|
||||
const auto condition = EmitExecActiveBool(state);
|
||||
state.builder.AddFunction({OpSelectionMerge, merge_label, SelectionControlNone});
|
||||
state.builder.AddFunction({OpBranchConditional, condition, then_label, merge_label});
|
||||
state.builder.AddFunction({OpLabel, then_label});
|
||||
fn();
|
||||
state.builder.AddFunction({OpBranch, merge_label});
|
||||
state.builder.AddFunction({OpLabel, merge_label});
|
||||
}
|
||||
|
||||
} // namespace Libs::Graphics::ShaderRecompiler::Spirv::Emitter
|
||||
|
||||
#endif /* EMULATOR_INCLUDE_EMULATOR_GRAPHICS_SHADER_RECOMPILER_SPIRVEMITTER_INTERNAL_H_ */
|
||||
|
||||
Reference in New Issue
Block a user