diff options
Diffstat (limited to 'source/x/vulkan-sdk/DirectXShaderCompiler-dump-reflection.patch')
-rw-r--r-- | source/x/vulkan-sdk/DirectXShaderCompiler-dump-reflection.patch | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/source/x/vulkan-sdk/DirectXShaderCompiler-dump-reflection.patch b/source/x/vulkan-sdk/DirectXShaderCompiler-dump-reflection.patch new file mode 100644 index 000000000..088c976d6 --- /dev/null +++ b/source/x/vulkan-sdk/DirectXShaderCompiler-dump-reflection.patch @@ -0,0 +1,279 @@ +From daf1386161cd6912fbd358f13d74e81466edab8b Mon Sep 17 00:00:00 2001 +From: Xiang Li <python3kgae@outlook.com> +Date: Wed, 24 May 2023 13:13:36 -0400 +Subject: [PATCH] [dxa] Add option to dump reflection (#5232) + +* [dxa] Add option to dump reflection + +New option -dumpreflection is added to dump reflection data. +This is to support %D3DReflect test in lit. + +* Move Reflection dump to DxilContainer. +--- + lib/DxilContainer/CMakeLists.txt | 3 + + .../DxilContainer}/D3DReflectionDumper.cpp | 0 + .../DxilContainer}/D3DReflectionStrings.cpp | 0 + .../DxilContainer}/RDATDumper.cpp | 0 + tools/clang/test/DXC/dxa_tests.test | 73 +++++++++++++++++++ + tools/clang/tools/dxa/CMakeLists.txt | 1 - + tools/clang/tools/dxa/dxa.cpp | 72 +++++++++++++++++- + .../unittests/HLSLTestLib/CMakeLists.txt | 3 - + utils/hct/hcttestcmds.cmd | 7 ++ + 9 files changed, 153 insertions(+), 6 deletions(-) + rename {tools/clang/unittests/HLSLTestLib => lib/DxilContainer}/D3DReflectionDumper.cpp (100%) + rename {tools/clang/unittests/HLSLTestLib => lib/DxilContainer}/D3DReflectionStrings.cpp (100%) + rename {tools/clang/unittests/HLSLTestLib => lib/DxilContainer}/RDATDumper.cpp (100%) + +diff --git a/lib/DxilContainer/CMakeLists.txt b/lib/DxilContainer/CMakeLists.txt +index f0ab344d23..a6369a36e6 100644 +--- a/lib/DxilContainer/CMakeLists.txt ++++ b/lib/DxilContainer/CMakeLists.txt +@@ -1,12 +1,15 @@ + # Copyright (C) Microsoft Corporation. All rights reserved. + # This file is distributed under the University of Illinois Open Source License. See LICENSE.TXT for details. + add_llvm_library(LLVMDxilContainer ++ D3DReflectionDumper.cpp ++ D3DReflectionStrings.cpp + DxilContainer.cpp + DxilContainerAssembler.cpp + DxilContainerReader.cpp + DxcContainerBuilder.cpp + DxilRDATBuilder.cpp + DxilRuntimeReflection.cpp ++ RDATDumper.cpp + RDATDxilSubobjects.cpp + + ADDITIONAL_HEADER_DIRS +diff --git a/tools/clang/unittests/HLSLTestLib/D3DReflectionDumper.cpp b/lib/DxilContainer/D3DReflectionDumper.cpp +similarity index 100% +rename from tools/clang/unittests/HLSLTestLib/D3DReflectionDumper.cpp +rename to lib/DxilContainer/D3DReflectionDumper.cpp +diff --git a/tools/clang/unittests/HLSLTestLib/D3DReflectionStrings.cpp b/lib/DxilContainer/D3DReflectionStrings.cpp +similarity index 100% +rename from tools/clang/unittests/HLSLTestLib/D3DReflectionStrings.cpp +rename to lib/DxilContainer/D3DReflectionStrings.cpp +diff --git a/tools/clang/unittests/HLSLTestLib/RDATDumper.cpp b/lib/DxilContainer/RDATDumper.cpp +similarity index 100% +rename from tools/clang/unittests/HLSLTestLib/RDATDumper.cpp +rename to lib/DxilContainer/RDATDumper.cpp +diff --git a/tools/clang/test/DXC/dxa_tests.test b/tools/clang/test/DXC/dxa_tests.test +index a7d8ee5bad..655155941b 100644 +--- a/tools/clang/test/DXC/dxa_tests.test ++++ b/tools/clang/test/DXC/dxa_tests.test +@@ -34,3 +34,76 @@ + // RUN: %dxc -dumpbin %t.rebuilt-container2.cso | FileCheck %s --check-prefix=REBUILD + + // REBUILD:define void @main() ++ ++// RUN: %dxa %t.dxa.cso -dumpreflection | FileCheck %s --check-prefix=REFLECTION ++// REFLECTION: ID3D12ShaderReflection: ++// REFLECTION-NEXT: D3D12_SHADER_DESC: ++// REFLECTION-NEXT: Shader Version: Vertex 6.0 ++// REFLECTION-NEXT: Creator: dxc ++// REFLECTION-NEXT: Flags: 0 ++// REFLECTION-NEXT: ConstantBuffers: 1 ++// REFLECTION-NEXT: BoundResources: 1 ++// REFLECTION-NEXT: InputParameters: 0 ++// REFLECTION-NEXT: OutputParameters: 1 ++// REFLECTION-NEXT: InstructionCount: 10 ++// REFLECTION-NEXT: TempArrayCount: 0 ++// REFLECTION-NEXT: DynamicFlowControlCount: 0 ++// REFLECTION-NEXT: ArrayInstructionCount: 0 ++// REFLECTION-NEXT: TextureNormalInstructions: 0 ++// REFLECTION-NEXT: TextureLoadInstructions: 0 ++// REFLECTION-NEXT: TextureCompInstructions: 0 ++// REFLECTION-NEXT: TextureBiasInstructions: 0 ++// REFLECTION-NEXT: TextureGradientInstructions: 0 ++// REFLECTION-NEXT: FloatInstructionCount: 1 ++// REFLECTION-NEXT: IntInstructionCount: 1 ++// REFLECTION-NEXT: UintInstructionCount: 0 ++// REFLECTION-NEXT: CutInstructionCount: 0 ++// REFLECTION-NEXT: EmitInstructionCount: 0 ++// REFLECTION-NEXT: cBarrierInstructions: 0 ++// REFLECTION-NEXT: cInterlockedInstructions: 0 ++// REFLECTION-NEXT: cTextureStoreInstructions: 0 ++// REFLECTION-NEXT: OutputParameter Elements: 1 ++// REFLECTION-NEXT: D3D12_SIGNATURE_PARAMETER_DESC: SemanticName: SV_POSITION SemanticIndex: 0 ++// REFLECTION-NEXT: Register: 0 ++// REFLECTION-NEXT: SystemValueType: D3D_NAME_POSITION ++// REFLECTION-NEXT: ComponentType: D3D_REGISTER_COMPONENT_FLOAT32 ++// REFLECTION-NEXT: Mask: xyzw (15) ++// REFLECTION-NEXT: ReadWriteMask: ---- (0) (AlwaysReads/NeverWrites) ++// REFLECTION-NEXT: Stream: 0 ++// REFLECTION-NEXT: MinPrecision: D3D_MIN_PRECISION_DEFAULT ++// REFLECTION-NEXT: Constant Buffers: ++// REFLECTION-NEXT: ID3D12ShaderReflectionConstantBuffer: ++// REFLECTION-NEXT: D3D12_SHADER_BUFFER_DESC: Name: $Globals ++// REFLECTION-NEXT: Type: D3D_CT_CBUFFER ++// REFLECTION-NEXT: Size: 16 ++// REFLECTION-NEXT: uFlags: 0 ++// REFLECTION-NEXT: Num Variables: 1 ++// REFLECTION-NEXT: { ++// REFLECTION-NEXT: ID3D12ShaderReflectionVariable: ++// REFLECTION-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: g ++// REFLECTION-NEXT: Size: 4 ++// REFLECTION-NEXT: StartOffset: 0 ++// REFLECTION-NEXT: uFlags: (D3D_SVF_USED) ++// REFLECTION-NEXT: DefaultValue: <nullptr> ++// REFLECTION-NEXT: ID3D12ShaderReflectionType: ++// REFLECTION-NEXT: D3D12_SHADER_TYPE_DESC: Name: int ++// REFLECTION-NEXT: Class: D3D_SVC_SCALAR ++// REFLECTION-NEXT: Type: D3D_SVT_INT ++// REFLECTION-NEXT: Elements: 0 ++// REFLECTION-NEXT: Rows: 1 ++// REFLECTION-NEXT: Columns: 1 ++// REFLECTION-NEXT: Members: 0 ++// REFLECTION-NEXT: Offset: 0 ++// REFLECTION-NEXT: CBuffer: $Globals ++// REFLECTION-NEXT: } ++// REFLECTION-NEXT: Bound Resources: ++// REFLECTION-NEXT: D3D12_SHADER_INPUT_BIND_DESC: Name: $Globals ++// REFLECTION-NEXT: Type: D3D_SIT_CBUFFER ++// REFLECTION-NEXT: uID: 0 ++// REFLECTION-NEXT: BindCount: 1 ++// REFLECTION-NEXT: BindPoint: 0 ++// REFLECTION-NEXT: Space: 0 ++// REFLECTION-NEXT: ReturnType: <unknown: 0> ++// REFLECTION-NEXT: Dimension: D3D_SRV_DIMENSION_UNKNOWN ++// REFLECTION-NEXT: NumSamples (or stride): 0 ++// REFLECTION-NEXT: uFlags: (D3D_SIF_USERPACKED) +diff --git a/tools/clang/tools/dxa/CMakeLists.txt b/tools/clang/tools/dxa/CMakeLists.txt +index 391ac8b062..33e61ca121 100644 +--- a/tools/clang/tools/dxa/CMakeLists.txt ++++ b/tools/clang/tools/dxa/CMakeLists.txt +@@ -23,7 +23,6 @@ add_clang_executable(dxa + + target_link_libraries(dxa + dxcompiler +- HLSLTestLib + ) + + set_target_properties(dxa PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION}) +diff --git a/tools/clang/tools/dxa/dxa.cpp b/tools/clang/tools/dxa/dxa.cpp +index dd3a0e64c4..cf9339afdc 100644 +--- a/tools/clang/tools/dxa/dxa.cpp ++++ b/tools/clang/tools/dxa/dxa.cpp +@@ -19,6 +19,7 @@ + #include "dxc/DxilContainer/DxilContainer.h" + #include "dxc/DxilRootSignature/DxilRootSignature.h" + #include "dxc/Test/RDATDumper.h" ++#include "dxc/Test/D3DReflectionDumper.h" + + #include "llvm/Support/CommandLine.h" + #include "llvm/Support//MSFileSystem.h" +@@ -63,6 +64,10 @@ static cl::opt<bool> DumpRDAT("dumprdat", + cl::desc("Dump RDAT"), + cl::init(false)); + ++static cl::opt<bool> DumpReflection("dumpreflection", ++ cl::desc("Dump reflection"), ++ cl::init(false)); ++ + class DxaContext { + + private: +@@ -80,6 +85,7 @@ class DxaContext { + void ListParts(); + void DumpRS(); + void DumpRDAT(); ++ void DumpReflection(); + }; + + void DxaContext::Assemble() { +@@ -378,6 +384,66 @@ void DxaContext::DumpRDAT() { + printf("%s", ss.str().c_str()); + } + ++void DxaContext::DumpReflection() { ++ CComPtr<IDxcBlobEncoding> pSource; ++ ReadFileIntoBlob(m_dxcSupport, StringRefWide(InputFilename), &pSource); ++ ++ CComPtr<IDxcContainerReflection> pReflection; ++ IFT(m_dxcSupport.CreateInstance(CLSID_DxcContainerReflection, &pReflection)); ++ IFT(pReflection->Load(pSource)); ++ ++ UINT32 partCount; ++ IFT(pReflection->GetPartCount(&partCount)); ++ ++ bool blobFound = false; ++ std::ostringstream ss; ++ hlsl::dump::D3DReflectionDumper dumper(ss); ++ ++ CComPtr<ID3D12ShaderReflection> pShaderReflection; ++ CComPtr<ID3D12LibraryReflection> pLibraryReflection; ++ for (uint32_t i = 0; i < partCount; ++i) { ++ uint32_t kind; ++ IFT(pReflection->GetPartKind(i, &kind)); ++ if (kind == (uint32_t)hlsl::DxilFourCC::DFCC_DXIL) { ++ blobFound = true; ++ CComPtr<IDxcBlob> pPart; ++ IFT(pReflection->GetPartContent(i, &pPart)); ++ const hlsl::DxilProgramHeader *pProgramHeader = ++ reinterpret_cast<const hlsl::DxilProgramHeader*>(pPart->GetBufferPointer()); ++ IFT(IsValidDxilProgramHeader(pProgramHeader, (uint32_t)pPart->GetBufferSize())); ++ hlsl::DXIL::ShaderKind SK = hlsl::GetVersionShaderType(pProgramHeader->ProgramVersion); ++ if (SK == hlsl::DXIL::ShaderKind::Library) { ++ IFT(pReflection->GetPartReflection(i, ++ IID_PPV_ARGS(&pLibraryReflection))); ++ ++ } else { ++ IFT(pReflection->GetPartReflection(i, ++ IID_PPV_ARGS(&pShaderReflection))); ++ } ++ break; ++ } else if (kind == (uint32_t)hlsl::DxilFourCC::DFCC_RuntimeData) { ++ CComPtr<IDxcBlob> pPart; ++ IFT(pReflection->GetPartContent(i, &pPart)); ++ hlsl::RDAT::DxilRuntimeData rdat(pPart->GetBufferPointer(), ++ pPart->GetBufferSize()); ++ hlsl::dump::DumpContext d(ss); ++ DumpRuntimeData(rdat, d); ++ } ++ } ++ ++ if (!blobFound) { ++ printf("Unable to find DXIL part"); ++ return; ++ } else if (pShaderReflection) { ++ dumper.Dump(pShaderReflection); ++ } else if (pLibraryReflection) { ++ dumper.Dump(pLibraryReflection); ++ } ++ ++ ss.flush(); ++ printf("%s", ss.str().c_str()); ++} ++ + using namespace hlsl::options; + + #ifdef _WIN32 +@@ -439,8 +505,10 @@ int main(int argc, const char **argv) { + } else if (DumpRDAT) { + pStage = "Dump RDAT"; + context.DumpRDAT(); +- } +- else { ++ } else if (DumpReflection) { ++ pStage = "Dump Reflection"; ++ context.DumpReflection(); ++ } else { + pStage = "Assembling"; + context.Assemble(); + } +diff --git a/tools/clang/unittests/HLSLTestLib/CMakeLists.txt b/tools/clang/unittests/HLSLTestLib/CMakeLists.txt +index 0dc937617c..2ade2b3138 100644 +--- a/tools/clang/unittests/HLSLTestLib/CMakeLists.txt ++++ b/tools/clang/unittests/HLSLTestLib/CMakeLists.txt +@@ -8,12 +8,9 @@ include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googlemock/include) + endif(WIN32) + + add_clang_library(HLSLTestLib +- D3DReflectionDumper.cpp +- D3DReflectionStrings.cpp + DxcTestUtils.cpp + FileCheckerTest.cpp + FileCheckForTest.cpp +- RDATDumper.cpp + ) + + add_dependencies(HLSLTestLib TablegenHLSLOptions) |