Skip to content
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions include/ShaderWriter/BaseTypes/ReturnWrapper.inl
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ namespace sdw
template< typename T >
ReturnWrapperT< ValueT > & ReturnWrapperT< ValueT >::operator=( T const & rhs )
{
static_assert( areCompatible< ValueT, T > );
auto & writer = *this->getWriter();
this->m_expr = sdw::makeAssign( this->getType()
, makeExpr( writer, *this )
Expand Down
3 changes: 2 additions & 1 deletion source/CompilerHlsl/HlslAdaptStatements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,8 @@ namespace hlsl
, m_exprCache.makeIdentifier( m_typesCache
, ast::var::makeVariable( m_adaptationData.getNextVarId()
, m_typesCache.getArray( ssboVar->getType(), 1u )
, ssboVar->getName() ) )
, ssboVar->getName()
, uint64_t( ast::var::Flag::eUniform ) ) )
, m_exprCache.makeLiteral( m_typesCache, 0 ) )
, mbrIndex
, uint64_t( ast::var::Flag::eUniform ) ) );
Expand Down
34 changes: 27 additions & 7 deletions source/CompilerHlsl/HlslGenerateStatements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1282,19 +1282,20 @@
void visitCompoundStmt( ast::stmt::Compound const * stmt )override
{
doAppendLineEnd();
m_result += "\n" + m_indent + "{\n";
m_result += "\n";
if ( !m_allowSingleLineCompound || stmt->size() > 1u )
m_result += m_indent + "{\n";
auto save = m_indent;
m_indent += "\t";
visitContainerStmt( stmt );
m_indent = save;

if ( m_appendSemiColon )
if ( !m_allowSingleLineCompound || stmt->size() > 1u )
{
m_result += m_indent + "};\n";
}
else
{
m_result += m_indent + "}\n";
if ( m_appendSemiColon )
m_result += m_indent + "};\n";
else
m_result += m_indent + "}\n";
}
}

Expand All @@ -1304,7 +1305,10 @@
doAppendLineEnd();
m_result += m_indent + "do";
m_appendSemiColon = false;
auto save = m_allowSingleLineCompound;
m_allowSingleLineCompound = true;
visitCompoundStmt( stmt );
m_allowSingleLineCompound = save;
m_result += m_indent + "while (" + doSubmit( *stmt->getCtrlExpr() ) + ");\n";
m_appendLineEnd = true;
}
Expand All @@ -1314,7 +1318,10 @@
m_result += m_indent + "else if (" + doSubmit( *stmt->getCtrlExpr() ) + ")";
m_appendSemiColon = false;
m_appendLineEnd = false;
auto save = m_allowSingleLineCompound;
m_allowSingleLineCompound = true;

Check warning on line 1322 in source/CompilerHlsl/HlslGenerateStatements.cpp

View check run for this annotation

Codecov / codecov/patch

source/CompilerHlsl/HlslGenerateStatements.cpp#L1321-L1322

Added lines #L1321 - L1322 were not covered by tests
visitCompoundStmt( stmt );
m_allowSingleLineCompound = save;

Check warning on line 1324 in source/CompilerHlsl/HlslGenerateStatements.cpp

View check run for this annotation

Codecov / codecov/patch

source/CompilerHlsl/HlslGenerateStatements.cpp#L1324

Added line #L1324 was not covered by tests
m_appendLineEnd = true;
}

Expand All @@ -1323,7 +1330,10 @@
m_result += m_indent + "else";
m_appendSemiColon = false;
m_appendLineEnd = false;
auto save = m_allowSingleLineCompound;
m_allowSingleLineCompound = true;
visitCompoundStmt( stmt );
m_allowSingleLineCompound = save;
m_appendLineEnd = true;
}

Expand All @@ -1334,9 +1344,12 @@
m_result += m_indent + "for (" + doSubmit( *stmt->getInitExpr() ) + "; ";
m_result += doSubmit( *stmt->getCtrlExpr() ) + "; ";
m_result += doSubmit( *stmt->getIncrExpr() ) + ")";
auto save = m_allowSingleLineCompound;
m_allowSingleLineCompound = true;

Check warning on line 1348 in source/CompilerHlsl/HlslGenerateStatements.cpp

View check run for this annotation

Codecov / codecov/patch

source/CompilerHlsl/HlslGenerateStatements.cpp#L1347-L1348

Added lines #L1347 - L1348 were not covered by tests
m_appendSemiColon = false;
visitCompoundStmt( stmt );
m_appendLineEnd = true;
m_allowSingleLineCompound = save;

Check warning on line 1352 in source/CompilerHlsl/HlslGenerateStatements.cpp

View check run for this annotation

Codecov / codecov/patch

source/CompilerHlsl/HlslGenerateStatements.cpp#L1352

Added line #L1352 was not covered by tests
}

void visitFragmentLayoutStmt( ast::stmt::FragmentLayout const * stmt )override
Expand Down Expand Up @@ -1626,7 +1639,10 @@
doAppendLineEnd();
m_result += m_indent + "if (" + doSubmit( *stmt->getCtrlExpr() ) + ")";
m_appendSemiColon = false;
auto save = m_allowSingleLineCompound;
m_allowSingleLineCompound = true;
visitCompoundStmt( stmt );
m_allowSingleLineCompound = save;

for ( auto & elseIf : stmt->getElseIfList() )
{
Expand Down Expand Up @@ -1882,7 +1898,10 @@
doAppendLineEnd();
m_result += m_indent + "while (" + doSubmit( *stmt->getCtrlExpr() ) + ")";
m_appendSemiColon = false;
auto save = m_allowSingleLineCompound;
m_allowSingleLineCompound = true;

Check warning on line 1902 in source/CompilerHlsl/HlslGenerateStatements.cpp

View check run for this annotation

Codecov / codecov/patch

source/CompilerHlsl/HlslGenerateStatements.cpp#L1901-L1902

Added lines #L1901 - L1902 were not covered by tests
visitCompoundStmt( stmt );
m_allowSingleLineCompound = save;

Check warning on line 1904 in source/CompilerHlsl/HlslGenerateStatements.cpp

View check run for this annotation

Codecov / codecov/patch

source/CompilerHlsl/HlslGenerateStatements.cpp#L1904

Added line #L1904 was not covered by tests
m_appendLineEnd = true;
}

Expand Down Expand Up @@ -1928,6 +1947,7 @@
std::string & m_result;
bool m_appendSemiColon{ false };
bool m_appendLineEnd{ false };
bool m_allowSingleLineCompound{ false };
};
}

Expand Down
104 changes: 82 additions & 22 deletions source/CompilerHlsl/HlslIntrinsicConfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,28 @@ namespace hlsl
case ast::expr::Intrinsic::eSubgroupBroadcastFirst3D:
case ast::expr::Intrinsic::eSubgroupBroadcastFirst4D:
case ast::expr::Intrinsic::eSubgroupBallot:
case ast::expr::Intrinsic::eSubgroupBallotBitCount:
case ast::expr::Intrinsic::eSubgroupBallotExclusiveBitCount:
case ast::expr::Intrinsic::eSubgroupShuffle1F:
case ast::expr::Intrinsic::eSubgroupShuffle2F:
case ast::expr::Intrinsic::eSubgroupShuffle3F:
case ast::expr::Intrinsic::eSubgroupShuffle4F:
case ast::expr::Intrinsic::eSubgroupShuffle1I:
case ast::expr::Intrinsic::eSubgroupShuffle2I:
case ast::expr::Intrinsic::eSubgroupShuffle3I:
case ast::expr::Intrinsic::eSubgroupShuffle4I:
case ast::expr::Intrinsic::eSubgroupShuffle1U:
case ast::expr::Intrinsic::eSubgroupShuffle2U:
case ast::expr::Intrinsic::eSubgroupShuffle3U:
case ast::expr::Intrinsic::eSubgroupShuffle4U:
case ast::expr::Intrinsic::eSubgroupShuffle1B:
case ast::expr::Intrinsic::eSubgroupShuffle2B:
case ast::expr::Intrinsic::eSubgroupShuffle3B:
case ast::expr::Intrinsic::eSubgroupShuffle4B:
case ast::expr::Intrinsic::eSubgroupShuffle1D:
case ast::expr::Intrinsic::eSubgroupShuffle2D:
case ast::expr::Intrinsic::eSubgroupShuffle3D:
case ast::expr::Intrinsic::eSubgroupShuffle4D:
case ast::expr::Intrinsic::eSubgroupAdd1F:
case ast::expr::Intrinsic::eSubgroupAdd2F:
case ast::expr::Intrinsic::eSubgroupAdd3F:
Expand Down Expand Up @@ -971,6 +993,66 @@ namespace hlsl
case ast::expr::Intrinsic::eSubgroupQuadBroadcast2D:
case ast::expr::Intrinsic::eSubgroupQuadBroadcast3D:
case ast::expr::Intrinsic::eSubgroupQuadBroadcast4D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4D:
config.requiresWaveOps = true;
break;

Expand Down Expand Up @@ -1023,32 +1105,10 @@ namespace hlsl
case ast::expr::Intrinsic::eAtomicExchange2H:
case ast::expr::Intrinsic::eAtomicExchange4H:
case ast::expr::Intrinsic::eSubgroupInverseBallot:
case ast::expr::Intrinsic::eSubgroupBallotBitCount:
case ast::expr::Intrinsic::eSubgroupBallotBitExtract:
case ast::expr::Intrinsic::eSubgroupBallotExclusiveBitCount:
case ast::expr::Intrinsic::eSubgroupBallotInclusiveBitCount:
case ast::expr::Intrinsic::eSubgroupBallotFindLSB:
case ast::expr::Intrinsic::eSubgroupBallotFindMSB:
case ast::expr::Intrinsic::eSubgroupShuffle1F:
case ast::expr::Intrinsic::eSubgroupShuffle2F:
case ast::expr::Intrinsic::eSubgroupShuffle3F:
case ast::expr::Intrinsic::eSubgroupShuffle4F:
case ast::expr::Intrinsic::eSubgroupShuffle1I:
case ast::expr::Intrinsic::eSubgroupShuffle2I:
case ast::expr::Intrinsic::eSubgroupShuffle3I:
case ast::expr::Intrinsic::eSubgroupShuffle4I:
case ast::expr::Intrinsic::eSubgroupShuffle1U:
case ast::expr::Intrinsic::eSubgroupShuffle2U:
case ast::expr::Intrinsic::eSubgroupShuffle3U:
case ast::expr::Intrinsic::eSubgroupShuffle4U:
case ast::expr::Intrinsic::eSubgroupShuffle1B:
case ast::expr::Intrinsic::eSubgroupShuffle2B:
case ast::expr::Intrinsic::eSubgroupShuffle3B:
case ast::expr::Intrinsic::eSubgroupShuffle4B:
case ast::expr::Intrinsic::eSubgroupShuffle1D:
case ast::expr::Intrinsic::eSubgroupShuffle2D:
case ast::expr::Intrinsic::eSubgroupShuffle3D:
case ast::expr::Intrinsic::eSubgroupShuffle4D:
case ast::expr::Intrinsic::eSubgroupShuffleXor1F:
case ast::expr::Intrinsic::eSubgroupShuffleXor2F:
case ast::expr::Intrinsic::eSubgroupShuffleXor3F:
Expand Down
88 changes: 88 additions & 0 deletions source/CompilerHlsl/HlslIntrinsicNames.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1137,6 +1137,26 @@ namespace hlsl
case ast::expr::Intrinsic::eSubgroupBroadcast2D:
case ast::expr::Intrinsic::eSubgroupBroadcast3D:
case ast::expr::Intrinsic::eSubgroupBroadcast4D:
case ast::expr::Intrinsic::eSubgroupShuffle1F:
case ast::expr::Intrinsic::eSubgroupShuffle2F:
case ast::expr::Intrinsic::eSubgroupShuffle3F:
case ast::expr::Intrinsic::eSubgroupShuffle4F:
case ast::expr::Intrinsic::eSubgroupShuffle1I:
case ast::expr::Intrinsic::eSubgroupShuffle2I:
case ast::expr::Intrinsic::eSubgroupShuffle3I:
case ast::expr::Intrinsic::eSubgroupShuffle4I:
case ast::expr::Intrinsic::eSubgroupShuffle1U:
case ast::expr::Intrinsic::eSubgroupShuffle2U:
case ast::expr::Intrinsic::eSubgroupShuffle3U:
case ast::expr::Intrinsic::eSubgroupShuffle4U:
case ast::expr::Intrinsic::eSubgroupShuffle1B:
case ast::expr::Intrinsic::eSubgroupShuffle2B:
case ast::expr::Intrinsic::eSubgroupShuffle3B:
case ast::expr::Intrinsic::eSubgroupShuffle4B:
case ast::expr::Intrinsic::eSubgroupShuffle1D:
case ast::expr::Intrinsic::eSubgroupShuffle2D:
case ast::expr::Intrinsic::eSubgroupShuffle3D:
case ast::expr::Intrinsic::eSubgroupShuffle4D:
case ast::expr::Intrinsic::eReadInvocation1F:
case ast::expr::Intrinsic::eReadInvocation2F:
case ast::expr::Intrinsic::eReadInvocation3F:
Expand Down Expand Up @@ -1398,6 +1418,74 @@ namespace hlsl
result = "QuadReadLaneAt";
break;

case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4F:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4I:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4U:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4B:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal1D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal2D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal3D:
case ast::expr::Intrinsic::eSubgroupQuadSwapHorizontal4D:
result = "QuadReadAcrossX";
break;
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4F:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4I:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4U:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4B:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical1D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical2D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical3D:
case ast::expr::Intrinsic::eSubgroupQuadSwapVertical4D:
result = "QuadReadAcrossY";
break;

case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4F:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4I:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4U:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4B:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal1D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal2D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal3D:
case ast::expr::Intrinsic::eSubgroupQuadSwapDiagonal4D:
result = "QuadReadAcrossDiagonal";
break;

case ast::expr::Intrinsic::eSubgroupQuadAll:
result = "QuadAll";
break;
Expand Down
Loading
Loading