DxilShaderFlags.h 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // DxilShaderFlags.h //
  4. // Copyright (C) Microsoft Corporation. All rights reserved. //
  5. // This file is distributed under the University of Illinois Open Source //
  6. // License. See LICENSE.TXT for details. //
  7. // //
  8. // Shader flags for a dxil shader function. //
  9. // //
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #pragma once
  12. namespace hlsl {
  13. class DxilModule;
  14. }
  15. namespace llvm {
  16. class Function;
  17. }
  18. namespace hlsl {
  19. // Shader properties.
  20. class ShaderFlags {
  21. public:
  22. ShaderFlags();
  23. static ShaderFlags CollectShaderFlags(const llvm::Function *F, const hlsl::DxilModule *M);
  24. unsigned GetGlobalFlags() const;
  25. uint64_t GetFeatureInfo() const;
  26. static uint64_t GetShaderFlagsRawForCollection(); // some flags are collected (eg use 64-bit), some provided (eg allow refactoring)
  27. uint64_t GetShaderFlagsRaw() const;
  28. void SetShaderFlagsRaw(uint64_t data);
  29. void CombineShaderFlags(const ShaderFlags &other);
  30. void SetDisableOptimizations(bool flag) { m_bDisableOptimizations = flag; }
  31. bool GetDisableOptimizations() const { return m_bDisableOptimizations; }
  32. void SetDisableMathRefactoring(bool flag) { m_bDisableMathRefactoring = flag; }
  33. bool GetDisableMathRefactoring() const { return m_bDisableMathRefactoring; }
  34. void SetEnableDoublePrecision(bool flag) { m_bEnableDoublePrecision = flag; }
  35. bool GetEnableDoublePrecision() const { return m_bEnableDoublePrecision; }
  36. void SetForceEarlyDepthStencil(bool flag) { m_bForceEarlyDepthStencil = flag; }
  37. bool GetForceEarlyDepthStencil() const { return m_bForceEarlyDepthStencil; }
  38. void SetEnableRawAndStructuredBuffers(bool flag) { m_bEnableRawAndStructuredBuffers = flag; }
  39. bool GetEnableRawAndStructuredBuffers() const { return m_bEnableRawAndStructuredBuffers; }
  40. void SetLowPrecisionPresent(bool flag) { m_bLowPrecisionPresent = flag; }
  41. bool GetLowPrecisionPresent() const { return m_bLowPrecisionPresent; }
  42. void SetEnableDoubleExtensions(bool flag) { m_bEnableDoubleExtensions = flag; }
  43. bool GetEnableDoubleExtensions() const { return m_bEnableDoubleExtensions; }
  44. void SetEnableMSAD(bool flag) { m_bEnableMSAD = flag; }
  45. bool GetEnableMSAD() const { return m_bEnableMSAD; }
  46. void SetAllResourcesBound(bool flag) { m_bAllResourcesBound = flag; }
  47. bool GetAllResourcesBound() const { return m_bAllResourcesBound; }
  48. void SetCSRawAndStructuredViaShader4X(bool flag) { m_bCSRawAndStructuredViaShader4X = flag; }
  49. bool GetCSRawAndStructuredViaShader4X() const { return m_bCSRawAndStructuredViaShader4X; }
  50. void SetROVs(bool flag) { m_bROVS = flag; }
  51. bool GetROVs() const { return m_bROVS; }
  52. void SetWaveOps(bool flag) { m_bWaveOps = flag; }
  53. bool GetWaveOps() const { return m_bWaveOps; }
  54. void SetInt64Ops(bool flag) { m_bInt64Ops = flag; }
  55. bool GetInt64Ops() const { return m_bInt64Ops; }
  56. void SetTiledResources(bool flag) { m_bTiledResources = flag; }
  57. bool GetTiledResources() const { return m_bTiledResources; }
  58. void SetStencilRef(bool flag) { m_bStencilRef = flag; }
  59. bool GetStencilRef() const { return m_bStencilRef; }
  60. void SetInnerCoverage(bool flag) { m_bInnerCoverage = flag; }
  61. bool GetInnerCoverage() const { return m_bInnerCoverage; }
  62. void SetViewportAndRTArrayIndex(bool flag) { m_bViewportAndRTArrayIndex = flag; }
  63. bool GetViewportAndRTArrayIndex() const { return m_bViewportAndRTArrayIndex; }
  64. void SetUAVLoadAdditionalFormats(bool flag) { m_bUAVLoadAdditionalFormats = flag; }
  65. bool GetUAVLoadAdditionalFormats() const { return m_bUAVLoadAdditionalFormats; }
  66. void SetLevel9ComparisonFiltering(bool flag) { m_bLevel9ComparisonFiltering = flag; }
  67. bool GetLevel9ComparisonFiltering() const { return m_bLevel9ComparisonFiltering; }
  68. void Set64UAVs(bool flag) { m_b64UAVs = flag; }
  69. bool Get64UAVs() const { return m_b64UAVs; }
  70. void SetUAVsAtEveryStage(bool flag) { m_UAVsAtEveryStage = flag; }
  71. bool GetUAVsAtEveryStage() const { return m_UAVsAtEveryStage; }
  72. void SetViewID(bool flag) { m_bViewID = flag; }
  73. bool GetViewID() const { return m_bViewID; }
  74. void SetBarycentrics(bool flag) { m_bBarycentrics = flag; }
  75. bool GetBarycentrics() const { return m_bBarycentrics; }
  76. void SetUseNativeLowPrecision(bool flag) { m_bUseNativeLowPrecision = flag; }
  77. bool GetUseNativeLowPrecision() const { return m_bUseNativeLowPrecision; }
  78. void SetShadingRate(bool flag) { m_bShadingRate = flag; }
  79. bool GetShadingRate() const { return m_bShadingRate; }
  80. void SetRaytracingTier1_1(bool flag) { m_bRaytracingTier1_1 = flag; }
  81. bool GetRaytracingTier1_1() const { return m_bRaytracingTier1_1; }
  82. void SetSamplerFeedback(bool flag) { m_bSamplerFeedback = flag; }
  83. bool GetSamplerFeedback() const { return m_bSamplerFeedback; }
  84. private:
  85. unsigned m_bDisableOptimizations :1; // D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION
  86. unsigned m_bDisableMathRefactoring :1; //~D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED
  87. unsigned m_bEnableDoublePrecision :1; // D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS
  88. unsigned m_bForceEarlyDepthStencil :1; // D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL
  89. unsigned m_bEnableRawAndStructuredBuffers :1; // D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
  90. unsigned m_bLowPrecisionPresent :1; // D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION
  91. unsigned m_bEnableDoubleExtensions :1; // D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS
  92. unsigned m_bEnableMSAD :1; // D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS
  93. unsigned m_bAllResourcesBound :1; // D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND
  94. unsigned m_bViewportAndRTArrayIndex :1; // SHADER_FEATURE_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER
  95. unsigned m_bInnerCoverage :1; // SHADER_FEATURE_INNER_COVERAGE
  96. unsigned m_bStencilRef :1; // SHADER_FEATURE_STENCIL_REF
  97. unsigned m_bTiledResources :1; // SHADER_FEATURE_TILED_RESOURCES
  98. unsigned m_bUAVLoadAdditionalFormats :1; // SHADER_FEATURE_TYPED_UAV_LOAD_ADDITIONAL_FORMATS
  99. unsigned m_bLevel9ComparisonFiltering :1; // SHADER_FEATURE_LEVEL_9_COMPARISON_FILTERING
  100. // SHADER_FEATURE_11_1_SHADER_EXTENSIONS shared with EnableMSAD
  101. unsigned m_b64UAVs :1; // SHADER_FEATURE_64_UAVS
  102. unsigned m_UAVsAtEveryStage :1; // SHADER_FEATURE_UAVS_AT_EVERY_STAGE
  103. unsigned m_bCSRawAndStructuredViaShader4X : 1; // SHADER_FEATURE_COMPUTE_SHADERS_PLUS_RAW_AND_STRUCTURED_BUFFERS_VIA_SHADER_4_X
  104. // SHADER_FEATURE_COMPUTE_SHADERS_PLUS_RAW_AND_STRUCTURED_BUFFERS_VIA_SHADER_4_X is specifically
  105. // about shader model 4.x.
  106. unsigned m_bROVS :1; // SHADER_FEATURE_ROVS
  107. unsigned m_bWaveOps :1; // SHADER_FEATURE_WAVE_OPS
  108. unsigned m_bInt64Ops :1; // SHADER_FEATURE_INT64_OPS
  109. unsigned m_bViewID : 1; // SHADER_FEATURE_VIEWID
  110. unsigned m_bBarycentrics : 1; // SHADER_FEATURE_BARYCENTRICS
  111. unsigned m_bUseNativeLowPrecision : 1;
  112. unsigned m_bShadingRate : 1; // SHADER_FEATURE_SHADINGRATE
  113. unsigned m_bRaytracingTier1_1 : 1; // SHADER_FEATURE_RAYTRACING_TIER_1_1
  114. unsigned m_bSamplerFeedback : 1; // SHADER_FEATURE_SAMPLER_FEEDBACK
  115. unsigned m_align0 : 5; // align to 32 bit.
  116. uint32_t m_align1; // align to 64 bit.
  117. };
  118. }