From 152a76216cfb1ada415b30966dcc8984406f2b03 Mon Sep 17 00:00:00 2001 From: Tex Riddell Date: Tue, 22 Feb 2022 10:27:07 -0800 Subject: [PATCH] ShaderOpTest: Fixes for sampler, HLSLHost, and texture init (#4282) - Skip Sampler for gpuHandle - Key m_DescriptorData map off descriptor name instead of resource name (potential many-to-one for descriptor to resource). - Fix uninitialized structs used in SetupRenderTarget - Fix explicit Viewport detection to use > 0 (since uninit might end up with some large negative number, preventing all PS invocations in a way that wouldn't trigger any debug layer spew - hard to track down). This check had caused a long-standing regression in HLSLHost. - Fix Sampler enum naming convention to be consistent with other string names for XML. - Fix issue preventing UINT32 values from being parsed from XML (making it more difficult to fill in texture data, like 8-bit unorm formats). --- tools/clang/unittests/HLSL/ShaderOpTest.cpp | 153 +++++++++++--------- 1 file changed, 82 insertions(+), 71 deletions(-) diff --git a/tools/clang/unittests/HLSL/ShaderOpTest.cpp b/tools/clang/unittests/HLSL/ShaderOpTest.cpp index 56511ae68..d6b5c0cae 100644 --- a/tools/clang/unittests/HLSL/ShaderOpTest.cpp +++ b/tools/clang/unittests/HLSL/ShaderOpTest.cpp @@ -301,30 +301,32 @@ void ShaderOpTest::CreateDescriptorHeaps() { const UINT descriptorSize = m_pDevice->GetDescriptorHandleIncrementSize(H.Desc.Type); CD3DX12_CPU_DESCRIPTOR_HANDLE cpuHandle(pHeap->GetCPUDescriptorHandleForHeapStart()); CD3DX12_GPU_DESCRIPTOR_HANDLE gpuHandle = {}; - if (H.Desc.Type != D3D12_DESCRIPTOR_HEAP_TYPE_RTV) - gpuHandle = CD3DX12_GPU_DESCRIPTOR_HANDLE(pHeap->GetGPUDescriptorHandleForHeapStart()); + if (H.Desc.Type != D3D12_DESCRIPTOR_HEAP_TYPE_RTV && + H.Desc.Type != D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) + gpuHandle = CD3DX12_GPU_DESCRIPTOR_HANDLE(pHeap->GetGPUDescriptorHandleForHeapStart()); for (ShaderOpDescriptor &D : H.Descriptors) { - ShaderOpResource *R = nullptr; + ShaderOpDescriptorData DData; + DData.Descriptor = &D; + ID3D12Resource *pResource = nullptr; if (H.Desc.Type != D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) { - R = m_pShaderOp->GetResourceByName(D.ResName); - if (R == nullptr) { + ShaderOpResource *R = m_pShaderOp->GetResourceByName(D.ResName); + auto itResData = m_ResourceData.find(D.ResName); + if (R == nullptr || itResData == m_ResourceData.end()) { LPCSTR DescName = D.Name ? D.Name : "[unnamed descriptor]"; ShaderOpLogFmt(L"Descriptor '%S' references missing resource '%S'", DescName, D.ResName); CHECK_HR(E_INVALIDARG); } + DData.ResData = &itResData->second; + pResource = DData.ResData->Resource; } - ShaderOpResourceData &Data = m_ResourceData[D.ResName]; - ShaderOpDescriptorData DData; - DData.Descriptor = &D; - DData.ResData = &Data; if (0 == _stricmp(D.Kind, "UAV")) { ID3D12Resource *pCounterResource = nullptr; if (D.CounterName && *D.CounterName) { ShaderOpResourceData &CounterData = m_ResourceData[D.CounterName]; pCounterResource = CounterData.Resource; } - m_pDevice->CreateUnorderedAccessView(Data.Resource, pCounterResource, + m_pDevice->CreateUnorderedAccessView(pResource, pCounterResource, &D.UavDesc, cpuHandle); } else if (0 == _stricmp(D.Kind, "SRV")) { @@ -332,15 +334,15 @@ void ShaderOpTest::CreateDescriptorHeaps() { if (D.SrvDescPresent) { pSrvDesc = &D.SrvDesc; } - m_pDevice->CreateShaderResourceView(Data.Resource, pSrvDesc, cpuHandle); + m_pDevice->CreateShaderResourceView(pResource, pSrvDesc, cpuHandle); } else if (0 == _stricmp(D.Kind, "RTV")) { - m_pDevice->CreateRenderTargetView(Data.Resource, nullptr, cpuHandle); + m_pDevice->CreateRenderTargetView(pResource, nullptr, cpuHandle); } else if (0 == _stricmp(D.Kind, "CBV")) { D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc; - cbvDesc.BufferLocation = Data.Resource->GetGPUVirtualAddress(); - cbvDesc.SizeInBytes = (UINT)Data.Resource->GetDesc().Width; + cbvDesc.BufferLocation = pResource->GetGPUVirtualAddress(); + cbvDesc.SizeInBytes = (UINT)pResource->GetDesc().Width; m_pDevice->CreateConstantBufferView(&cbvDesc, cpuHandle); } else if (0 == _stricmp(D.Kind, "SAMPLER")) { @@ -348,14 +350,13 @@ void ShaderOpTest::CreateDescriptorHeaps() { } DData.CPUHandle = cpuHandle; - if (R) - m_DescriptorData[R->Name] = DData; cpuHandle = cpuHandle.Offset(descriptorSize); if (H.Desc.Type != D3D12_DESCRIPTOR_HEAP_TYPE_RTV && H.Desc.Type != D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) { DData.GPUHandle = gpuHandle; gpuHandle = gpuHandle.Offset(descriptorSize); } + m_DescriptorData[D.Name] = DData; } } @@ -897,7 +898,7 @@ void ShaderOpTest::RunCommandList() { // Use the first render target to set up the viewport and scissors. ShaderOpRenderTarget& rt = m_pShaderOp->RenderTargets[0]; ShaderOpResource *R = m_pShaderOp->GetResourceByName(rt.Name); - if (rt.Viewport.Width != 0 && rt.Viewport.Height != 0 ) { + if (rt.Viewport.Width > 0 && rt.Viewport.Height > 0 ) { memcpy(&viewport, &rt.Viewport, sizeof(rt.Viewport)); } else { @@ -1085,7 +1086,7 @@ void ShaderOpTest::SetupRenderTarget(ShaderOp *pShaderOp, ID3D12Device *pDevice, m_CommandList.Queue = pCommandQueue; // Simplification - add the render target name if missing, set it up 'by hand' if not. if (pShaderOp->RenderTargets.empty()) { - ShaderOpRenderTarget RT; + ShaderOpRenderTarget RT = {}; RT.Name = pShaderOp->Strings.insert("RTarget"); pShaderOp->RenderTargets.push_back(RT); ShaderOpResource R; @@ -1106,7 +1107,7 @@ void ShaderOpTest::SetupRenderTarget(ShaderOp *pShaderOp, ID3D12Device *pDevice, // Create a render target heap to put this in. ShaderOpDescriptorHeap *pRtvHeap = pShaderOp->GetDescriptorHeapByName("RtvHeap"); if (pRtvHeap == nullptr) { - ShaderOpDescriptorHeap H; + ShaderOpDescriptorHeap H = {}; ZeroMemory(&H, sizeof(H)); H.Name = pShaderOp->Strings.insert("RtvHeap"); H.Desc.NumDescriptors = 1; @@ -1115,7 +1116,7 @@ void ShaderOpTest::SetupRenderTarget(ShaderOp *pShaderOp, ID3D12Device *pDevice, pRtvHeap = &pShaderOp->DescriptorHeaps.back(); } if (pRtvHeap->Descriptors.empty()) { - ShaderOpDescriptor D; + ShaderOpDescriptor D = {}; ZeroMemory(&D, sizeof(D)); D.Name = pShaderOp->Strings.insert("RTarget"); D.ResName = D.Name; @@ -1526,61 +1527,61 @@ static const ParserEnumValue PRIMITIVE_TOPOLOGY_TYPE_TABLE[] = { }; static const ParserEnumValue FILTER_TABLE[] = { - { L"FILTER_MIN_MAG_MIP_POINT", D3D12_FILTER_MIN_MAG_MIP_POINT }, - { L"FILTER_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR }, - { L"FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT }, - { L"FILTER_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR }, - { L"FILTER_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT }, - { L"FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, - { L"FILTER_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT }, - { L"FILTER_MIN_MAG_MIP_LINEAR", D3D12_FILTER_MIN_MAG_MIP_LINEAR }, - { L"FILTER_ANISOTROPIC", D3D12_FILTER_ANISOTROPIC }, - { L"FILTER_COMPARISON_MIN_MAG_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT }, - { L"FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR }, - { L"FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT }, - { L"FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR }, - { L"FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT }, - { L"FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, - { L"FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT }, - { L"FILTER_COMPARISON_MIN_MAG_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR }, - { L"FILTER_COMPARISON_ANISOTROPIC", D3D12_FILTER_COMPARISON_ANISOTROPIC }, - { L"FILTER_MINIMUM_MIN_MAG_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT }, - { L"FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR }, - { L"FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT }, - { L"FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR }, - { L"FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT }, - { L"FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, - { L"FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT }, - { L"FILTER_MINIMUM_MIN_MAG_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR }, - { L"FILTER_MINIMUM_ANISOTROPIC", D3D12_FILTER_MINIMUM_ANISOTROPIC }, - { L"FILTER_MAXIMUM_MIN_MAG_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT }, - { L"FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR }, - { L"FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT }, - { L"FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR }, - { L"FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT }, - { L"FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, - { L"FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT }, - { L"FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR }, - { L"FILTER_MAXIMUM_ANISOTROPIC", D3D12_FILTER_MAXIMUM_ANISOTROPIC }, + { L"MIN_MAG_MIP_POINT", D3D12_FILTER_MIN_MAG_MIP_POINT }, + { L"MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR }, + { L"MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT }, + { L"MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR }, + { L"MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT }, + { L"MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, + { L"MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT }, + { L"MIN_MAG_MIP_LINEAR", D3D12_FILTER_MIN_MAG_MIP_LINEAR }, + { L"ANISOTROPIC", D3D12_FILTER_ANISOTROPIC }, + { L"COMPARISON_MIN_MAG_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT }, + { L"COMPARISON_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR }, + { L"COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT }, + { L"COMPARISON_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR }, + { L"COMPARISON_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT }, + { L"COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, + { L"COMPARISON_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT }, + { L"COMPARISON_MIN_MAG_MIP_LINEAR", D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR }, + { L"COMPARISON_ANISOTROPIC", D3D12_FILTER_COMPARISON_ANISOTROPIC }, + { L"MINIMUM_MIN_MAG_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT }, + { L"MINIMUM_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR }, + { L"MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT }, + { L"MINIMUM_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR }, + { L"MINIMUM_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT }, + { L"MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, + { L"MINIMUM_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT }, + { L"MINIMUM_MIN_MAG_MIP_LINEAR", D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR }, + { L"MINIMUM_ANISOTROPIC", D3D12_FILTER_MINIMUM_ANISOTROPIC }, + { L"MAXIMUM_MIN_MAG_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT }, + { L"MAXIMUM_MIN_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR }, + { L"MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT }, + { L"MAXIMUM_MIN_POINT_MAG_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR }, + { L"MAXIMUM_MIN_LINEAR_MAG_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT }, + { L"MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR }, + { L"MAXIMUM_MIN_MAG_LINEAR_MIP_POINT", D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT }, + { L"MAXIMUM_MIN_MAG_MIP_LINEAR", D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR }, + { L"MAXIMUM_ANISOTROPIC", D3D12_FILTER_MAXIMUM_ANISOTROPIC }, }; static const ParserEnumValue TEXTURE_ADDRESS_MODE_TABLE[] = { - { L"TEXTURE_ADDRESS_MODE_WRAP", D3D12_TEXTURE_ADDRESS_MODE_WRAP }, - { L"TEXTURE_ADDRESS_MODE_MIRROR", D3D12_TEXTURE_ADDRESS_MODE_MIRROR }, - { L"TEXTURE_ADDRESS_MODE_CLAMP", D3D12_TEXTURE_ADDRESS_MODE_CLAMP }, - { L"TEXTURE_ADDRESS_MODE_BORDER", D3D12_TEXTURE_ADDRESS_MODE_BORDER }, - { L"TEXTURE_ADDRESS_MODE_MIRROR_ONCE", D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE }, + { L"WRAP", D3D12_TEXTURE_ADDRESS_MODE_WRAP }, + { L"MIRROR", D3D12_TEXTURE_ADDRESS_MODE_MIRROR }, + { L"CLAMP", D3D12_TEXTURE_ADDRESS_MODE_CLAMP }, + { L"BORDER", D3D12_TEXTURE_ADDRESS_MODE_BORDER }, + { L"MIRROR_ONCE", D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE }, }; static const ParserEnumValue COMPARISON_FUNC_TABLE[] = { - { L"COMPARISON_FUNC_NEVER", D3D12_COMPARISON_FUNC_NEVER }, - { L"COMPARISON_FUNC_LESS", D3D12_COMPARISON_FUNC_LESS }, - { L"COMPARISON_FUNC_EQUAL", D3D12_COMPARISON_FUNC_EQUAL }, - { L"COMPARISON_FUNC_LESS_EQUAL", D3D12_COMPARISON_FUNC_LESS_EQUAL }, - { L"COMPARISON_FUNC_GREATER", D3D12_COMPARISON_FUNC_GREATER }, - { L"COMPARISON_FUNC_NOT_EQUAL", D3D12_COMPARISON_FUNC_NOT_EQUAL }, - { L"COMPARISON_FUNC_GREATER_EQUAL", D3D12_COMPARISON_FUNC_GREATER_EQUAL }, - { L"COMPARISON_FUNC_ALWAYS", D3D12_COMPARISON_FUNC_ALWAYS }, + { L"NEVER", D3D12_COMPARISON_FUNC_NEVER }, + { L"LESS", D3D12_COMPARISON_FUNC_LESS }, + { L"EQUAL", D3D12_COMPARISON_FUNC_EQUAL }, + { L"LESS_EQUAL", D3D12_COMPARISON_FUNC_LESS_EQUAL }, + { L"GREATER", D3D12_COMPARISON_FUNC_GREATER }, + { L"NOT_EQUAL", D3D12_COMPARISON_FUNC_NOT_EQUAL }, + { L"GREATER_EQUAL", D3D12_COMPARISON_FUNC_GREATER_EQUAL }, + { L"ALWAYS", D3D12_COMPARISON_FUNC_ALWAYS }, }; @@ -1757,7 +1758,7 @@ HRESULT ShaderOpParser::ReadAttrUINT64(IXmlReader *pReader, LPCWSTR pAttrName, U } LPCWSTR pText; CHECK_HR(pReader->GetValue(&pText, nullptr)); - long long ll = _wtol(pText); + long long ll = _wtoll(pText); if (errno == ERANGE) CHECK_HR(E_INVALIDARG); *pValue = ll; CHECK_HR(pReader->MoveToElement()); @@ -2323,7 +2324,17 @@ void ParseDataFromText(LPCWSTR pText, LPCWSTR pEnd, DXIL::ComponentType compType else if (compType == DXIL::ComponentType::I32) { int val = _wtoi(pText); pB = (BYTE *)&val; - V.insert(V.end(), pB, pB + sizeof(int)); + V.insert(V.end(), pB, pB + sizeof(int32_t)); + } + else if (compType == DXIL::ComponentType::U32) { + long long llval = _wtoll(pText); + if (errno == ERANGE) CHECK_HR(E_INVALIDARG); + unsigned int val = 0; + if (llval > UINT32_MAX) + CHECK_HR(E_INVALIDARG); + val = (unsigned int)llval; + pB = (BYTE *)&val; + V.insert(V.end(), pB, pB + sizeof(uint32_t)); } else { DXASSERT_ARGS(false, "Unsupported stream component type : %u", compType);