From 04b7714bb69bb53e80dc12ec7eeed692c3dd8c5e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 22:22:47 +0000 Subject: [PATCH 1/2] Register DxilCounters.cpp with hctgen and regenerate it - Add TARGET_NAME optional parameter to add_hlsl_hctgen() in HCT.cmake to allow different CMake target name and hctgen mode (needed since DxilCounters is already used as the target name for DxilCounters.h) - Add add_hlsl_hctgen(DxilCounters OUTPUT DxilCounters.cpp CODE_TAG ...) to lib/DXIL/CMakeLists.txt so DxilCounters.cpp participates in source regeneration when HLSL_COPY_GENERATED_SOURCES is set - Regenerate DxilCounters.cpp: adds BarrierByMemoryType/Handle/Node, FDot, VectorReduceAnd/Or, SampleCmpGrad/Bias, RawBufferVectorLoad/Store Co-authored-by: damyanp <8118402+damyanp@users.noreply.github.com> Agent-Logs-Url: https://github.com/damyanp/DirectXShaderCompiler/sessions/12071741-931b-464e-90a5-ce03c9b6e9c3 --- cmake/modules/HCT.cmake | 9 ++++++--- lib/DXIL/CMakeLists.txt | 1 + lib/DXIL/DxilCounters.cpp | 32 ++++++++++++++++++-------------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/cmake/modules/HCT.cmake b/cmake/modules/HCT.cmake index 4afb2a4ee3..b30e03f5ec 100644 --- a/cmake/modules/HCT.cmake +++ b/cmake/modules/HCT.cmake @@ -38,9 +38,12 @@ endif() function(add_hlsl_hctgen mode) cmake_parse_arguments(ARG "BUILD_DIR;CODE_TAG" - "OUTPUT" + "OUTPUT;TARGET_NAME" "" ${ARGN}) + if (NOT ARG_TARGET_NAME) + set(ARG_TARGET_NAME ${mode}) + endif() if (NOT ARG_OUTPUT) message(FATAL_ERROR "add_hlsl_hctgen requires OUTPUT argument") @@ -132,8 +135,8 @@ function(add_hlsl_hctgen mode) DEPENDS ${output} COMMENT "Verifying clang-format results...") - add_custom_target(${mode} + add_custom_target(${ARG_TARGET_NAME} DEPENDS ${temp_output}.stamp) - add_dependencies(HCTGen ${mode}) + add_dependencies(HCTGen ${ARG_TARGET_NAME}) endfunction() diff --git a/lib/DXIL/CMakeLists.txt b/lib/DXIL/CMakeLists.txt index f5e75a9e09..33bbe612ae 100644 --- a/lib/DXIL/CMakeLists.txt +++ b/lib/DXIL/CMakeLists.txt @@ -2,6 +2,7 @@ # This file is distributed under the University of Illinois Open Source License. # See LICENSE.TXT for details. +add_hlsl_hctgen(DxilCounters OUTPUT DxilCounters.cpp CODE_TAG TARGET_NAME DxilCountersCpp) add_hlsl_hctgen(DxilOperations OUTPUT DxilOperations.cpp CODE_TAG) add_hlsl_hctgen(DxilShaderModel OUTPUT DxilShaderModel.cpp CODE_TAG) add_hlsl_hctgen(DxilMetadata OUTPUT DxilMetadataHelper.cpp CODE_TAG) diff --git a/lib/DXIL/DxilCounters.cpp b/lib/DXIL/DxilCounters.cpp index b1e4e48162..8662d96b6d 100644 --- a/lib/DXIL/DxilCounters.cpp +++ b/lib/DXIL/DxilCounters.cpp @@ -133,17 +133,18 @@ bool CountDxilOp_atomic(unsigned op) { return op == 70 || (78 <= op && op <= 79); } bool CountDxilOp_barrier(unsigned op) { - // Instructions: Barrier=80 - return op == 80; + // Instructions: Barrier=80, BarrierByMemoryType=244, + // BarrierByMemoryHandle=245, BarrierByNodeRecordHandle=246 + return op == 80 || (244 <= op && op <= 246); } bool CountDxilOp_floats(unsigned op) { // Instructions: FAbs=6, Saturate=7, IsNaN=8, IsInf=9, IsFinite=10, // IsNormal=11, Cos=12, Sin=13, Tan=14, Acos=15, Asin=16, Atan=17, Hcos=18, // Hsin=19, Htan=20, Exp=21, Frc=22, Log=23, Sqrt=24, Rsqrt=25, Round_ne=26, // Round_ni=27, Round_pi=28, Round_z=29, FMax=35, FMin=36, Fma=47, Dot2=54, - // Dot3=55, Dot4=56, Dot2AddHalf=162 + // Dot3=55, Dot4=56, Dot2AddHalf=162, FDot=311 return (6 <= op && op <= 29) || (35 <= op && op <= 36) || op == 47 || - (54 <= op && op <= 56) || op == 162; + (54 <= op && op <= 56) || op == 162 || op == 311; } bool CountDxilOp_gs_cut(unsigned op) { // Instructions: CutStream=98, EmitThenCutStream=99 @@ -155,9 +156,9 @@ bool CountDxilOp_gs_emit(unsigned op) { } bool CountDxilOp_ints(unsigned op) { // Instructions: IMax=37, IMin=38, IMul=41, IMad=48, Ibfe=51, - // Dot4AddI8Packed=163 + // Dot4AddI8Packed=163, VectorReduceAnd=309, VectorReduceOr=310 return (37 <= op && op <= 38) || op == 41 || op == 48 || op == 51 || - op == 163; + op == 163 || (309 <= op && op <= 310); } bool CountDxilOp_sig_ld(unsigned op) { // Instructions: LoadInput=4, LoadOutputControlPoint=103, @@ -175,16 +176,18 @@ bool CountDxilOp_tex_bias(unsigned op) { } bool CountDxilOp_tex_cmp(unsigned op) { // Instructions: SampleCmp=64, SampleCmpLevelZero=65, TextureGatherCmp=74, - // SampleCmpLevel=224 - return (64 <= op && op <= 65) || op == 74 || op == 224; + // SampleCmpLevel=224, SampleCmpGrad=254, SampleCmpBias=255 + return (64 <= op && op <= 65) || op == 74 || op == 224 || + (254 <= op && op <= 255); } bool CountDxilOp_tex_grad(unsigned op) { // Instructions: SampleGrad=63 return op == 63; } bool CountDxilOp_tex_load(unsigned op) { - // Instructions: TextureLoad=66, BufferLoad=68, RawBufferLoad=139 - return op == 66 || op == 68 || op == 139; + // Instructions: TextureLoad=66, BufferLoad=68, RawBufferLoad=139, + // RawBufferVectorLoad=303 + return op == 66 || op == 68 || op == 139 || op == 303; } bool CountDxilOp_tex_norm(unsigned op) { // Instructions: Sample=60, SampleLevel=62, TextureGather=73, @@ -195,17 +198,18 @@ bool CountDxilOp_tex_store(unsigned op) { // Instructions: TextureStore=67, BufferStore=69, RawBufferStore=140, // WriteSamplerFeedback=174, WriteSamplerFeedbackBias=175, // WriteSamplerFeedbackLevel=176, WriteSamplerFeedbackGrad=177, - // TextureStoreSample=225 + // TextureStoreSample=225, RawBufferVectorStore=304 return op == 67 || op == 69 || op == 140 || (174 <= op && op <= 177) || - op == 225; + op == 225 || op == 304; } bool CountDxilOp_uints(unsigned op) { // Instructions: Bfrev=30, Countbits=31, FirstbitLo=32, FirstbitHi=33, // FirstbitSHi=34, UMax=39, UMin=40, UMul=42, UDiv=43, UAddc=44, USubb=45, - // UMad=49, Msad=50, Ubfe=52, Bfi=53, Dot4AddU8Packed=164 + // UMad=49, Msad=50, Ubfe=52, Bfi=53, Dot4AddU8Packed=164, + // VectorReduceAnd=309, VectorReduceOr=310 return (30 <= op && op <= 34) || (39 <= op && op <= 40) || (42 <= op && op <= 45) || (49 <= op && op <= 50) || - (52 <= op && op <= 53) || op == 164; + (52 <= op && op <= 53) || op == 164 || (309 <= op && op <= 310); } // Counter functions for llvm ops: bool CountLlvmOp_atomic(unsigned op) { From ddcbecf21e5df2a5939044151f3b57a5e44a636d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 23:49:42 +0000 Subject: [PATCH 2/2] Auto-derive hctgen target names from mode + output extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of a special-purpose TARGET_NAME parameter, the CMake target name is now automatically derived as "${mode}_${extension}" (e.g. DxilCounters_h, DxilCounters_cpp). This resolves the DxilCounters name conflict between the .h and .cpp targets without any caller-visible special-casing. Update the one external reference (DxilIntrinsicTables → DxilIntrinsicTables_h) in tools/clang/lib/Sema/CMakeLists.txt. Co-authored-by: damyanp <8118402+damyanp@users.noreply.github.com> Agent-Logs-Url: https://github.com/damyanp/DirectXShaderCompiler/sessions/9de1b168-12bd-407d-b2e7-e83f2480dc9d --- cmake/modules/HCT.cmake | 11 +++++------ lib/DXIL/CMakeLists.txt | 2 +- tools/clang/lib/Sema/CMakeLists.txt | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/cmake/modules/HCT.cmake b/cmake/modules/HCT.cmake index b30e03f5ec..b8447aa7a3 100644 --- a/cmake/modules/HCT.cmake +++ b/cmake/modules/HCT.cmake @@ -38,12 +38,9 @@ endif() function(add_hlsl_hctgen mode) cmake_parse_arguments(ARG "BUILD_DIR;CODE_TAG" - "OUTPUT;TARGET_NAME" + "OUTPUT" "" ${ARGN}) - if (NOT ARG_TARGET_NAME) - set(ARG_TARGET_NAME ${mode}) - endif() if (NOT ARG_OUTPUT) message(FATAL_ERROR "add_hlsl_hctgen requires OUTPUT argument") @@ -70,6 +67,8 @@ function(add_hlsl_hctgen mode) ${opcodes_json}) get_filename_component(output_extension ${full_output} LAST_EXT) + string(SUBSTRING ${output_extension} 1 -1 output_extension_no_dot) + set(target_name "${mode}_${output_extension_no_dot}") if (CLANG_FORMAT_EXE AND output_extension MATCHES "\.h|\.cpp|\.inl") set(format_cmd COMMAND ${CLANG_FORMAT_EXE} -i ${temp_output}) @@ -135,8 +134,8 @@ function(add_hlsl_hctgen mode) DEPENDS ${output} COMMENT "Verifying clang-format results...") - add_custom_target(${ARG_TARGET_NAME} + add_custom_target(${target_name} DEPENDS ${temp_output}.stamp) - add_dependencies(HCTGen ${ARG_TARGET_NAME}) + add_dependencies(HCTGen ${target_name}) endfunction() diff --git a/lib/DXIL/CMakeLists.txt b/lib/DXIL/CMakeLists.txt index 33bbe612ae..e68f533811 100644 --- a/lib/DXIL/CMakeLists.txt +++ b/lib/DXIL/CMakeLists.txt @@ -2,7 +2,7 @@ # This file is distributed under the University of Illinois Open Source License. # See LICENSE.TXT for details. -add_hlsl_hctgen(DxilCounters OUTPUT DxilCounters.cpp CODE_TAG TARGET_NAME DxilCountersCpp) +add_hlsl_hctgen(DxilCounters OUTPUT DxilCounters.cpp CODE_TAG) add_hlsl_hctgen(DxilOperations OUTPUT DxilOperations.cpp CODE_TAG) add_hlsl_hctgen(DxilShaderModel OUTPUT DxilShaderModel.cpp CODE_TAG) add_hlsl_hctgen(DxilMetadata OUTPUT DxilMetadataHelper.cpp CODE_TAG) diff --git a/tools/clang/lib/Sema/CMakeLists.txt b/tools/clang/lib/Sema/CMakeLists.txt index a4c51fa17c..a6f450b366 100644 --- a/tools/clang/lib/Sema/CMakeLists.txt +++ b/tools/clang/lib/Sema/CMakeLists.txt @@ -6,7 +6,7 @@ set(LLVM_LINK_COMPONENTS # HLSL Change Begin add_hlsl_hctgen(DxilIntrinsicTables BUILD_DIR OUTPUT gen_intrin_main_tables_15.h) include_directories(${CMAKE_CURRENT_BINARY_DIR}) -list(APPEND LLVM_COMMON_DEPENDS DxilIntrinsicTables) +list(APPEND LLVM_COMMON_DEPENDS DxilIntrinsicTables_h) # HLSL Change End add_clang_library(clangSema