From 397a67082e1a087e6844513f8ed08c5bec5c7eeb Mon Sep 17 00:00:00 2001 From: Tex Riddell Date: Fri, 12 Jul 2019 19:19:14 -0700 Subject: [PATCH] Misc cleanup during review --- include/dxc/DXIL/DxilMetadataHelper.h | 5 +---- include/dxc/DXIL/DxilShaderFlags.h | 6 +++--- lib/DXIL/DxilMetadataHelper.cpp | 4 ++-- lib/DXIL/DxilUtil.cpp | 2 +- lib/HLSL/DxilContainerReflection.cpp | 10 +++++++++- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/include/dxc/DXIL/DxilMetadataHelper.h b/include/dxc/DXIL/DxilMetadataHelper.h index 1da14b08f..849209b3e 100644 --- a/include/dxc/DXIL/DxilMetadataHelper.h +++ b/include/dxc/DXIL/DxilMetadataHelper.h @@ -197,10 +197,7 @@ public: // TemplateArgument tags static const unsigned kDxilTemplateArgTypeTag = 0; // Type template argument, followed by undef of type static const unsigned kDxilTemplateArgIntegralTag = 1; // Integral template argument, followed by i64 value - // TemplateArgType - static const unsigned kDxilTemplateArgType = 1; // Position of type for template arg that is type - static const unsigned kDxilTemplateArgIntegral = 1; // Position of i64 for template arg that is integral - + static const unsigned kDxilTemplateArgValue = 1; // Position of template arg value (type or int) // Control flow hint. static const char kDxilControlFlowHintMDName[]; diff --git a/include/dxc/DXIL/DxilShaderFlags.h b/include/dxc/DXIL/DxilShaderFlags.h index 3694365b3..a474312c9 100644 --- a/include/dxc/DXIL/DxilShaderFlags.h +++ b/include/dxc/DXIL/DxilShaderFlags.h @@ -108,10 +108,10 @@ namespace hlsl { void SetShadingRate(bool flag) { m_bShadingRate = flag; } bool GetShadingRate() const { return m_bShadingRate; } - void SetRaytracingTier1_1(bool flag) { m_bRaytracingTier1_1 = flag; } + void SetRaytracingTier1_1(bool flag) { m_bRaytracingTier1_1 = flag; } bool GetRaytracingTier1_1() const { return m_bRaytracingTier1_1; } - void SetSamplerFeedback(bool flag) { m_bSamplerFeedback = flag; } + void SetSamplerFeedback(bool flag) { m_bSamplerFeedback = flag; } bool GetSamplerFeedback() const { return m_bSamplerFeedback; } private: @@ -149,7 +149,7 @@ namespace hlsl { unsigned m_bShadingRate : 1; // SHADER_FEATURE_SHADINGRATE - unsigned m_bRaytracingTier1_1 : 1; // SHADER_FEATURE_RAYTRACING_TIER_1_1 + unsigned m_bRaytracingTier1_1 : 1; // SHADER_FEATURE_RAYTRACING_TIER_1_1 unsigned m_bSamplerFeedback : 1; // SHADER_FEATURE_SAMPLER_FEEDBACK unsigned m_align0 : 5; // align to 32 bit. diff --git a/lib/DXIL/DxilMetadataHelper.cpp b/lib/DXIL/DxilMetadataHelper.cpp index 9de3437ab..9a91c3b0e 100644 --- a/lib/DXIL/DxilMetadataHelper.cpp +++ b/lib/DXIL/DxilMetadataHelper.cpp @@ -795,11 +795,11 @@ void DxilMDHelper::LoadDxilTemplateArgAnnotation(const llvm::MDOperand &MDO, Dxi case kDxilTemplateArgTypeTag: IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA); annotation.SetType(MetadataAsValue::get(m_Ctx, - pTupleMD->getOperand(kDxilTemplateArgType))->getType()); + pTupleMD->getOperand(kDxilTemplateArgValue))->getType()); break; case kDxilTemplateArgIntegralTag: IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA); - annotation.SetIntegral((int64_t)ConstMDToUint64(pTupleMD->getOperand(kDxilTemplateArgType))); + annotation.SetIntegral((int64_t)ConstMDToUint64(pTupleMD->getOperand(kDxilTemplateArgValue))); break; } } diff --git a/lib/DXIL/DxilUtil.cpp b/lib/DXIL/DxilUtil.cpp index ec391af42..32401995c 100644 --- a/lib/DXIL/DxilUtil.cpp +++ b/lib/DXIL/DxilUtil.cpp @@ -565,7 +565,7 @@ bool IsHLSLRayQueryType(llvm::Type *Ty) { if (llvm::StructType *ST = dyn_cast(Ty)) { StringRef name = ST->getName(); // TODO: don't check names. - name = name.ltrim("class."); + ConsumePrefix(name, "class."); if (name.startswith("RayQuery<")) return true; } diff --git a/lib/HLSL/DxilContainerReflection.cpp b/lib/HLSL/DxilContainerReflection.cpp index c2e0aac78..ba7eb7d6b 100644 --- a/lib/HLSL/DxilContainerReflection.cpp +++ b/lib/HLSL/DxilContainerReflection.cpp @@ -2171,7 +2171,15 @@ UINT DxilShaderReflection::GetThreadGroupSize(UINT *pSizeX, UINT *pSizeY, UINT * } UINT64 DxilShaderReflection::GetRequiresFlags() { - return m_pDxilModule->m_ShaderFlags.GetFeatureInfo(); + UINT64 result = m_pDxilModule->m_ShaderFlags.GetFeatureInfo(); + // FeatureInfo flags are identical, with the exception of a collision between: + // SHADER_FEATURE_COMPUTE_SHADERS_PLUS_RAW_AND_STRUCTURED_BUFFERS_VIA_SHADER_4_X + // and D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL + // We keep track of the flag elsewhere, so use that instead. + result &= ~(UINT64)D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL; + if (m_pDxilModule->m_ShaderFlags.GetForceEarlyDepthStencil()) + result |= D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL; + return result; }