Skip to content

Commit 6d0531b

Browse files
committed
Removed ConsistentBindings from intermediate flags and moved it to DxilShaderFlags instead. This is because 'keep-all' from the other PR relies on this Enum to be serialized; because reflection needs to know if unused resources are preserved.
1 parent 68f20d6 commit 6d0531b

File tree

14 files changed

+56
-40
lines changed

14 files changed

+56
-40
lines changed

include/dxc/DXIL/DxilConstants.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515

1616
namespace hlsl {
1717

18+
enum class UnusedResourceBinding : uint32_t { Strip, ReserveAll, Count };
19+
20+
static_assert(UnusedResourceBinding::Count <= UnusedResourceBinding(7),
21+
"Only 3 bits are reserved for UnusedResourceBinding by HLOptions "
22+
"and ShaderFlags");
23+
1824
/* <py>
1925
import hctdb_instrhelp
2026
</py> */

include/dxc/DXIL/DxilModule.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "dxc/DXIL/DxilSignature.h"
2121
#include "dxc/DXIL/DxilSubobject.h"
2222
#include "dxc/DXIL/DxilTypeSystem.h"
23+
#include "dxc/DXIL/DxilConstants.h"
2324

2425
#include <memory>
2526
#include <string>
@@ -287,8 +288,9 @@ class DxilModule {
287288
// Intermediate options that do not make it to DXIL
288289
void SetLegacyResourceReservation(bool legacyResourceReservation);
289290
bool GetLegacyResourceReservation() const;
290-
void SetConsistentBindings(bool consistentBindings);
291-
bool GetConsistentBindings() const;
291+
292+
void SetUnusedResourceBinding(UnusedResourceBinding unusedResourceBinding);
293+
UnusedResourceBinding GetUnusedResourceBinding() const;
292294
void ClearIntermediateOptions();
293295

294296
// Hull and Domain shaders.
@@ -347,8 +349,7 @@ class DxilModule {
347349
unsigned m_ActiveStreamMask = 0;
348350

349351
enum IntermediateFlags : uint32_t {
350-
LegacyResourceReservation = 1 << 0,
351-
ConsistentBindings = 1 << 1
352+
LegacyResourceReservation = 1 << 0
352353
};
353354

354355
llvm::LLVMContext &m_Ctx;
@@ -386,6 +387,7 @@ class DxilModule {
386387
bool m_bUseMinPrecision = true; // use min precision by default;
387388
bool m_bAllResourcesBound = false;
388389
bool m_bResMayAlias = false;
390+
UnusedResourceBinding m_unusedResourceBinding = UnusedResourceBinding::Strip;
389391

390392
// properties from HLModule that should not make it to the final DXIL
391393
uint32_t m_IntermediateFlags = 0;

include/dxc/DXIL/DxilShaderFlags.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
namespace hlsl {
1717
class DxilModule;
1818
struct DxilFunctionProps;
19+
enum class UnusedResourceBinding : uint32_t;
1920
}
2021

2122
namespace llvm {
@@ -219,6 +220,14 @@ class ShaderFlags {
219220
void SetRequiresGroup(bool flag) { m_bRequiresGroup = flag; }
220221
bool GetRequiresGroup() const { return m_bRequiresGroup; }
221222

223+
void SetUnusedResourceBinding(UnusedResourceBinding bindings) {
224+
m_UnusedResourceBinding = unsigned(bindings);
225+
}
226+
227+
UnusedResourceBinding GetUnusedResourceBinding() {
228+
return UnusedResourceBinding(m_UnusedResourceBinding);
229+
}
230+
222231
private:
223232
// Bit: 0
224233
unsigned
@@ -359,7 +368,9 @@ class ShaderFlags {
359368
unsigned m_bRequiresGroup : 1; // SHADER_FEATURE_OPT_REQUIRES_GROUP
360369
// (OptFeatureInfo_RequiresGroup)
361370

362-
uint32_t m_align1 : 23; // align to 64 bit.
371+
unsigned m_UnusedResourceBinding : 3;
372+
373+
uint32_t m_align1 : 20; // align to 64 bit.
363374
};
364375

365376
} // namespace hlsl

include/dxc/HLSL/HLModule.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ struct HLOptions {
5454
bDisableOptimizations(false), PackingStrategy(0),
5555
bUseMinPrecision(false), bDX9CompatMode(false), bFXCCompatMode(false),
5656
bLegacyResourceReservation(false), bForceZeroStoreLifetimes(false),
57-
bConsistentBindings(false), unused(0) {}
57+
bUnusedResourceBinding(0), unused(0) {}
5858
uint32_t GetHLOptionsRaw() const;
5959
void SetHLOptionsRaw(uint32_t data);
6060
unsigned bDefaultRowMajor : 1;
@@ -70,8 +70,8 @@ struct HLOptions {
7070
unsigned bLegacyResourceReservation : 1;
7171
unsigned bForceZeroStoreLifetimes : 1;
7272
unsigned bResMayAlias : 1;
73-
unsigned bConsistentBindings : 1;
74-
unsigned unused : 19;
73+
unsigned bUnusedResourceBinding : 3;
74+
unsigned unused : 17;
7575
};
7676

7777
typedef std::unordered_map<const llvm::Function *,

include/dxc/Support/HLSLOptions.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "llvm/ADT/StringRef.h"
2222
#include "llvm/Option/ArgList.h"
2323

24+
#include "dxc/DXIL/DxilConstants.h"
2425
#include "dxc/Support/WinIncludes.h"
2526

2627
#include "dxc/dxcapi.h"
@@ -54,8 +55,6 @@ enum HlslFlags {
5455
RewriteOption = (1 << 17),
5556
};
5657

57-
enum class UnusedResourceBinding { Strip, ReserveAll };
58-
5958
enum ID {
6059
OPT_INVALID = 0, // This is not an option ID.
6160
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
@@ -229,7 +228,7 @@ class DxcOpts {
229228
std::string TimeTrace = ""; // OPT_ftime_trace[EQ]
230229
unsigned TimeTraceGranularity = 500; // OPT_ftime_trace_granularity_EQ
231230
bool VerifyDiagnostics = false; // OPT_verify
232-
UnusedResourceBinding UnusedResources =
231+
UnusedResourceBinding UnusedResourceBinding =
233232
UnusedResourceBinding::Strip; // OPT_fhlsl_unused_resource_bindings_EQ
234233
bool Verbose = false; // OPT_verbose
235234

lib/DXIL/DxilModule.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -586,14 +586,12 @@ bool DxilModule::GetLegacyResourceReservation() const {
586586
return (m_IntermediateFlags & LegacyResourceReservation) != 0;
587587
}
588588

589-
void DxilModule::SetConsistentBindings(bool consistentBindings) {
590-
m_IntermediateFlags &= ~ConsistentBindings;
591-
if (consistentBindings)
592-
m_IntermediateFlags |= ConsistentBindings;
589+
void DxilModule::SetUnusedResourceBinding(UnusedResourceBinding unusedResourceBinding) {
590+
m_unusedResourceBinding = unusedResourceBinding;
593591
}
594592

595-
bool DxilModule::GetConsistentBindings() const {
596-
return (m_IntermediateFlags & ConsistentBindings) != 0;
593+
UnusedResourceBinding DxilModule::GetUnusedResourceBinding() const {
594+
return m_unusedResourceBinding;
597595
}
598596

599597
void DxilModule::ClearIntermediateOptions() { m_IntermediateFlags = 0; }
@@ -1548,6 +1546,7 @@ void DxilModule::LoadDxilMetadata() {
15481546
m_bUseMinPrecision = !m_ShaderFlags.GetUseNativeLowPrecision();
15491547
m_bDisableOptimizations = m_ShaderFlags.GetDisableOptimizations();
15501548
m_bAllResourcesBound = m_ShaderFlags.GetAllResourcesBound();
1549+
m_unusedResourceBinding = m_ShaderFlags.GetUnusedResourceBinding();
15511550
m_bResMayAlias = !m_ShaderFlags.GetResMayNotAlias();
15521551
}
15531552

lib/DXIL/DxilShaderFlags.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ ShaderFlags::ShaderFlags()
4747
m_bAdvancedTextureOps(false), m_bWriteableMSAATextures(false),
4848
m_bReserved(false), m_bSampleCmpGradientOrBias(false),
4949
m_bExtendedCommandInfo(false), m_bUsesDerivatives(false),
50-
m_bRequiresGroup(false), m_align1(0) {
50+
m_bRequiresGroup(false), m_UnusedResourceBinding(0), m_align1(0) {
5151
// Silence unused field warnings
5252
(void)m_align1;
5353
}
@@ -412,6 +412,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
412412
flag.SetUseNativeLowPrecision(!M->GetUseMinPrecision());
413413
flag.SetDisableOptimizations(M->GetDisableOptimization());
414414
flag.SetAllResourcesBound(M->GetAllResourcesBound());
415+
flag.SetUnusedResourceBinding(M->GetUnusedResourceBinding());
415416

416417
bool hasDouble = false;
417418
// ddiv dfma drcp d2i d2u i2d u2d.

lib/DxcSupport/HLSLOptions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -870,9 +870,9 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
870870
Args.getLastArgValue(OPT_fhlsl_unused_resource_bindings_EQ, "strip");
871871

872872
if (UnusedResources == "strip")
873-
opts.UnusedResources = UnusedResourceBinding::Strip;
873+
opts.UnusedResourceBinding = UnusedResourceBinding::Strip;
874874
else if (UnusedResources == "reserve-all")
875-
opts.UnusedResources = UnusedResourceBinding::ReserveAll;
875+
opts.UnusedResourceBinding = UnusedResourceBinding::ReserveAll;
876876
else {
877877
errors << "Error: Invalid value for -fhlsl-unused-resource-bindings option "
878878
"specified ("

lib/HLSL/DxilCondenseResources.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ class DxilLowerCreateHandleForLib : public ModulePass {
550550
ResourceRegisterAllocator.GatherReservedRegisters(DM);
551551

552552
// Remove unused resources.
553-
if (!DM.GetConsistentBindings())
553+
if (DM.GetUnusedResourceBinding() == UnusedResourceBinding::Strip)
554554
bChanged |= DM.RemoveResourcesWithUnusedSymbols();
555555

556556
unsigned newResources = DM.GetCBuffers().size() + DM.GetUAVs().size() +
@@ -562,7 +562,7 @@ class DxilLowerCreateHandleForLib : public ModulePass {
562562
{
563563
DxilValueCache *DVC = &getAnalysis<DxilValueCache>();
564564
bool bLocalChanged = LegalizeResources(M, DVC);
565-
if (bLocalChanged && !DM.GetConsistentBindings()) {
565+
if (bLocalChanged && DM.GetUnusedResourceBinding() == UnusedResourceBinding::Strip) {
566566
// Remove unused resources.
567567
bChanged |= DM.RemoveResourcesWithUnusedSymbols();
568568
}
@@ -571,7 +571,7 @@ class DxilLowerCreateHandleForLib : public ModulePass {
571571

572572
bChanged |= ResourceRegisterAllocator.AllocateRegisters(DM);
573573

574-
if (DM.GetConsistentBindings())
574+
if (DM.GetUnusedResourceBinding() == UnusedResourceBinding::ReserveAll)
575575
bChanged |= DM.RemoveResourcesWithUnusedSymbols();
576576

577577
// Fill in top-level CBuffer variable usage bit

lib/HLSL/DxilGenerationPass.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ void InitDxilModuleFromHLModule(HLModule &H, DxilModule &M, bool HasDebugInfo) {
155155
// bool m_bDisableOptimizations;
156156
M.SetDisableOptimization(H.GetHLOptions().bDisableOptimizations);
157157
M.SetLegacyResourceReservation(H.GetHLOptions().bLegacyResourceReservation);
158-
M.SetConsistentBindings(H.GetHLOptions().bConsistentBindings);
158+
M.SetUnusedResourceBinding(
159+
UnusedResourceBinding(H.GetHLOptions().bUnusedResourceBinding));
159160
// bool m_bDisableMathRefactoring;
160161
// bool m_bEnableDoublePrecision;
161162
// bool m_bEnableDoubleExtensions;

0 commit comments

Comments
 (0)