Skip to content

Add overloads for int & uint wave scan intrinsics #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions ags_lib/hlsl/ags_shader_intrinsics_dx11.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -1190,6 +1190,154 @@ float4 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, float4 src)
return float4(asfloat(retVal.x), asfloat(retVal.y), asfloat(retVal.z), asfloat(retVal.w));
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : int
*************************************************************************************************************
*/
int AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, int src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src), 0, retVal);

return asint(retVal);
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : int2
*************************************************************************************************************
*/
int2 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, int2 src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint2 retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.x), 0, retVal.x);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.y), 0, retVal.y);

return int2(asint(retVal.x), asint(retVal.y));
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : int3
*************************************************************************************************************
*/
int3 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, int3 src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint3 retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.x), 0, retVal.x);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.y), 0, retVal.y);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.z), 0, retVal.z);

return int3(asint(retVal.x), asint(retVal.y), asint(retVal.z));
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : int4
*************************************************************************************************************
*/
int4 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, int4 src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint4 retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.x), 0, retVal.x);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.y), 0, retVal.y);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.z), 0, retVal.z);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, asuint(src.w), 0, retVal.w);

return int4(asint(retVal.x), asint(retVal.y), asint(retVal.z), asint(retVal.w));
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : uint
*************************************************************************************************************
*/
uint AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, uint src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src, 0, retVal);

return retVal;
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : uint2
*************************************************************************************************************
*/
uint2 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, uint2 src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint2 retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.x, 0, retVal.x);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.y, 0, retVal.y);

return retVal;
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : uint3
*************************************************************************************************************
*/
uint3 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, uint3 src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint3 retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.x, 0, retVal.x);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.y, 0, retVal.y);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.z, 0, retVal.z);

return retVal;
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_WaveScan : uint4
*************************************************************************************************************
*/
uint4 AmdDxExtShaderIntrinsics_WaveScan(uint waveOp, uint flags, uint4 src)
{
uint instruction = MakeAmdShaderIntrinsicsInstruction(AmdDxExtShaderIntrinsicsOpCode_WaveScan,
AmdDxExtShaderIntrinsicsOpcodePhase_0,
(waveOp << AmdDxExtShaderIntrinsicsWaveOp_OpcodeShift) |
(flags << AmdDxExtShaderIntrinsicsWaveOp_FlagShift));
uint4 retVal;
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.x, 0, retVal.x);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.y, 0, retVal.y);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.z, 0, retVal.z);
AmdDxExtShaderIntrinsicsUAV.InterlockedCompareExchange(instruction, src.w, 0, retVal.w);

return retVal;
}

/**
*************************************************************************************************************
* AmdDxExtShaderIntrinsics_GetDrawIndex
Expand Down