Skip to content
Merged
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
73 changes: 50 additions & 23 deletions tools/clang/unittests/HLSLExec/LinAlgTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9024,7 +9024,10 @@ static HRESULT queryConvertDestinationGranular(
static HRESULT queryConvertSupport(ID3D12Device *Device,
ComponentType SourceCompType,
ComponentType DestinationCompType,
bool &TierSupported, bool &SourceSupported,
bool &Supported) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
bool &Supported) {
bool &DestinationSupported) {

TierSupported = false;
SourceSupported = false;
Supported = false;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
Supported = false;
DestinationSupported = false;

if (!Device)
return E_INVALIDARG;
Expand All @@ -9044,10 +9047,13 @@ static HRESULT queryConvertSupport(ID3D12Device *Device,

linalg_test::TierSupport Tier;
HRESULT HR = linalg_test::queryTierSupport(Device, Tier);
if (FAILED(HR) || !Tier.supported())
if (FAILED(HR))
return HR;

bool SourceSupported = false;
TierSupported = Tier.supported();
if (!TierSupported)
return S_OK;

HR = queryConvertSourceSupport(Device, SourceCompType, SourceSupported);
if (FAILED(HR) || !SourceSupported)
return HR;
Expand All @@ -9068,21 +9074,32 @@ static HRESULT queryConvertSupport(ID3D12Device *Device,
return HR;
}

static bool convertTypesApplicable(ID3D12Device *Device,
ComponentType SourceCompType,
ComponentType DestinationCompType,
LPCWSTR CaseName) {
static bool
convertTypesApplicable(ID3D12Device *Device, ComponentType SourceCompType,
ComponentType DestinationCompType,
linalg_test::CapabilityRequirement Requirement,
LPCWSTR CaseName) {
bool TierSupported = false;
bool SourceSupported = false;
bool Supported = false;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
bool Supported = false;
bool DestinationSupported = false;

const HRESULT QueryResult = queryConvertSupport(
Device, SourceCompType, DestinationCompType, Supported);
if (!applyApplicability(
linalg_test::classifyApplicability(
QueryResult, Supported,
linalg_test::CapabilityRequirement::CapabilityGated),
CaseName))
return false;
const HRESULT QueryResult =
queryConvertSupport(Device, SourceCompType, DestinationCompType,
TierSupported, SourceSupported, Supported);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
TierSupported, SourceSupported, Supported);
TierSupported, SourceSupported, DestinationSupported);


return true;
// A device without linear algebra is outside the Tier 1 requirements, and a
// mandatory destination is still unreachable when the source type itself is
// unsupported, so both skip rather than failing.
const bool QueryAnswered = SUCCEEDED(QueryResult);
const bool NoLinearAlgebra = QueryAnswered && !TierSupported;
const bool UnsupportedSource = QueryAnswered && !SourceSupported;

linalg_test::CapabilityRequirement Effective = Requirement;
if (NoLinearAlgebra || UnsupportedSource)
Effective = linalg_test::CapabilityRequirement::CapabilityGated;

return applyApplicability(
linalg_test::classifyApplicability(QueryResult, Supported, Effective),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
linalg_test::classifyApplicability(QueryResult, Supported, Effective),
linalg_test::classifyApplicability(QueryResult, DestinationSupported, Effective),

CaseName);
Comment on lines +9089 to +9102

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: simplify

Suggested change
// A device without linear algebra is outside the Tier 1 requirements, and a
// mandatory destination is still unreachable when the source type itself is
// unsupported, so both skip rather than failing.
const bool QueryAnswered = SUCCEEDED(QueryResult);
const bool NoLinearAlgebra = QueryAnswered && !TierSupported;
const bool UnsupportedSource = QueryAnswered && !SourceSupported;
linalg_test::CapabilityRequirement Effective = Requirement;
if (NoLinearAlgebra || UnsupportedSource)
Effective = linalg_test::CapabilityRequirement::CapabilityGated;
return applyApplicability(
linalg_test::classifyApplicability(QueryResult, Supported, Effective),
CaseName);
// A device without linear algebra is outside the Tier 1 requirements, and a
// mandatory destination is unreachable when the source type is unsupported.
// Only successfully queried missing prerequisites should downgrade to a skip.
const bool MissingPrerequisite =
SUCCEEDED(QueryResult) && (!TierSupported || !SourceSupported);
const linalg_test::CapabilityRequirement Effective =
MissingPrerequisite
? linalg_test::CapabilityRequirement::CapabilityGated
: Requirement

}

template <typename T>
Expand Down Expand Up @@ -9420,8 +9437,10 @@ void DxilConf_SM610_LinAlg::CopyConvert_Wave_4x8_F32_ToF16_Transpose() {
}

void DxilConf_SM610_LinAlg::Convert_I16_ToI32_Exact() {
if (!convertTypesApplicable(D3DDevice, ComponentType::I16, ComponentType::I32,
L"Convert_I16_ToI32_Exact"))
if (!convertTypesApplicable(
D3DDevice, ComponentType::I16, ComponentType::I32,
linalg_test::CapabilityRequirement::CapabilityGated,
L"Convert_I16_ToI32_Exact"))
return;

runExactConvert(
Expand All @@ -9447,8 +9466,10 @@ static void runFP8ConvertCase(ID3D12Device *Device,
}

void DxilConf_SM610_LinAlg::Convert_F32_ToI16_RTNE_Saturate() {
if (!convertTypesApplicable(D3DDevice, ComponentType::F32, ComponentType::I16,
L"Convert_F32_ToI16_RTNE_Saturate"))
if (!convertTypesApplicable(
D3DDevice, ComponentType::F32, ComponentType::I16,
linalg_test::CapabilityRequirement::CapabilityGated,
L"Convert_F32_ToI16_RTNE_Saturate"))
return;

runExactConvert(D3DDevice, DxcSupport, ConvertF32ToI16CoverageShader,
Expand All @@ -9471,10 +9492,13 @@ void DxilConf_SM610_LinAlg::Convert_F16_ToE4M3FN_AndBack() {

if (!convertTypesApplicable(D3DDevice, ComponentType::F16,
ComponentType::F8_E4M3FN,
linalg_test::CapabilityRequirement::Mandatory,
L"Convert_F16_ToE4M3FN_AndBack"))
return;
if (!convertTypesApplicable(D3DDevice, ComponentType::U32, ComponentType::F16,
L"Convert_F16_ToE4M3FN_AndBack"))
if (!convertTypesApplicable(
D3DDevice, ComponentType::U32, ComponentType::F16,
linalg_test::CapabilityRequirement::CapabilityGated,
L"Convert_F16_ToE4M3FN_AndBack"))
return;
runFP8ConvertCase(D3DDevice, DxcSupport, ComponentType::F8_E4M3FN, *Data,
VerboseLogging);
Expand All @@ -9492,10 +9516,13 @@ void DxilConf_SM610_LinAlg::Convert_F16_ToE5M2_AndBack() {

if (!convertTypesApplicable(D3DDevice, ComponentType::F16,
ComponentType::F8_E5M2,
linalg_test::CapabilityRequirement::Mandatory,
L"Convert_F16_ToE5M2_AndBack"))
return;
if (!convertTypesApplicable(D3DDevice, ComponentType::U32, ComponentType::F16,
L"Convert_F16_ToE5M2_AndBack"))
if (!convertTypesApplicable(
D3DDevice, ComponentType::U32, ComponentType::F16,
linalg_test::CapabilityRequirement::CapabilityGated,
L"Convert_F16_ToE5M2_AndBack"))
return;
runFP8ConvertCase(D3DDevice, DxcSupport, ComponentType::F8_E5M2, *Data,
VerboseLogging);
Expand Down
Loading