DxilResourceBase.cpp 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // DxilResourceBase.cpp //
  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. ///////////////////////////////////////////////////////////////////////////////
  9. #include "dxc/HLSL/DxilResourceBase.h"
  10. #include "dxc/Support/Global.h"
  11. namespace hlsl {
  12. //------------------------------------------------------------------------------
  13. //
  14. // ResourceBase methods.
  15. //
  16. DxilResourceBase::DxilResourceBase(Class C)
  17. : m_Class(C)
  18. , m_Kind(Kind::Invalid)
  19. , m_ID(UINT_MAX)
  20. , m_SpaceID(0)
  21. , m_LowerBound(0)
  22. , m_RangeSize(0)
  23. , m_pSymbol(nullptr)
  24. , m_pHandle(nullptr) {
  25. }
  26. DxilResourceBase::Class DxilResourceBase::GetClass() const { return m_Class; }
  27. DxilResourceBase::Kind DxilResourceBase::GetKind() const { return m_Kind; }
  28. void DxilResourceBase::SetKind(DxilResourceBase::Kind ResourceKind) {
  29. DXASSERT(ResourceKind > Kind::Invalid && ResourceKind < Kind::NumEntries, "otherwise the caller passed wrong resource type");
  30. m_Kind = ResourceKind;
  31. }
  32. unsigned DxilResourceBase::GetID() const { return m_ID; }
  33. unsigned DxilResourceBase::GetSpaceID() const { return m_SpaceID; }
  34. unsigned DxilResourceBase::GetLowerBound() const { return m_LowerBound; }
  35. unsigned DxilResourceBase::GetUpperBound() const { return m_RangeSize != UINT_MAX ? m_LowerBound + m_RangeSize - 1 : UINT_MAX; }
  36. unsigned DxilResourceBase::GetRangeSize() const { return m_RangeSize; }
  37. llvm::Constant *DxilResourceBase::GetGlobalSymbol() const { return m_pSymbol; }
  38. const std::string &DxilResourceBase::GetGlobalName() const { return m_Name; }
  39. llvm::Value *DxilResourceBase::GetHandle() const { return m_pHandle; }
  40. bool DxilResourceBase::IsAllocated() const { return m_LowerBound != UINT_MAX; }
  41. bool DxilResourceBase::IsUnbounded() const { return m_RangeSize == UINT_MAX; }
  42. void DxilResourceBase::SetClass(Class C) { m_Class = C; }
  43. void DxilResourceBase::SetID(unsigned ID) { m_ID = ID; }
  44. void DxilResourceBase::SetSpaceID(unsigned SpaceID) { m_SpaceID = SpaceID; }
  45. void DxilResourceBase::SetLowerBound(unsigned LB) { m_LowerBound = LB; }
  46. void DxilResourceBase::SetRangeSize(unsigned RangeSize) { m_RangeSize = RangeSize; }
  47. void DxilResourceBase::SetGlobalSymbol(llvm::Constant *pGV) { m_pSymbol = pGV; }
  48. void DxilResourceBase::SetGlobalName(const std::string &Name) { m_Name = Name; }
  49. void DxilResourceBase::SetHandle(llvm::Value *pHandle) { m_pHandle = pHandle; }
  50. static const char *s_ResourceClassNames[(unsigned)DxilResourceBase::Class::Invalid] = {
  51. "texture", "UAV", "cbuffer", "sampler"
  52. };
  53. const char *DxilResourceBase::GetResClassName() const {
  54. return s_ResourceClassNames[(unsigned)m_Class];
  55. }
  56. static const char *s_ResourceIDPrefixs[(unsigned)DxilResourceBase::Class::Invalid] = {
  57. "T", "U", "CB", "S"
  58. };
  59. const char *DxilResourceBase::GetResIDPrefix() const {
  60. return s_ResourceIDPrefixs[(unsigned)m_Class];
  61. }
  62. static const char *s_ResourceBindPrefixs[(unsigned)DxilResourceBase::Class::Invalid] = {
  63. "t", "u", "cb", "s"
  64. };
  65. const char *DxilResourceBase::GetResBindPrefix() const {
  66. return s_ResourceBindPrefixs[(unsigned)m_Class];
  67. }
  68. static const char *s_ResourceDimNames[(unsigned)DxilResourceBase::Kind::NumEntries] = {
  69. "invalid", "1d", "2d", "2dMS", "3d",
  70. "cube", "1darray", "2darray", "2darrayMS", "cubearray",
  71. "buf", "rawbuf", "structbuf", "cbuffer", "sampler",
  72. "tbuffer", "ras",
  73. };
  74. const char *DxilResourceBase::GetResDimName() const {
  75. return s_ResourceDimNames[(unsigned)m_Kind];
  76. }
  77. } // namespace hlsl