2
0

unbounded-arrays-srg-layout.py 5.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. """
  4. Copyright (c) Contributors to the Open 3D Engine Project.
  5. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  6. SPDX-License-Identifier: Apache-2.0 OR MIT
  7. """
  8. import sys
  9. import os
  10. sys.path.append("..")
  11. sys.path.append("../..")
  12. from clr import *
  13. import testfuncs
  14. # This test validates SRG Layout emission when using unbounded arrays.
  15. # In particular, valid unbounded arrays should be emitted with
  16. # "count" = -1
  17. # in the json srg layout.
  18. def verify(thefile, compilerPath, silent):
  19. j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg"])
  20. if ok:
  21. predicates = []
  22. #SRG1
  23. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
  24. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
  25. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
  26. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 8)
  27. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 1)
  28. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
  29. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 2)
  30. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == -1)
  31. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["index"] == 0)
  32. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["count"] == 1)
  33. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["index"] == 1)
  34. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["count"] == -1)
  35. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["index"] == 0)
  36. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["count"] == 1)
  37. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["index"] == 1)
  38. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["count"] == -1)
  39. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][0]["index"] == 0)
  40. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][0]["count"] == 1)
  41. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][1]["index"] == 1)
  42. predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][1]["count"] == -1)
  43. #SRG2
  44. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
  45. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
  46. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
  47. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSRGConstants"][1]["constantByteSize"] == 8)
  48. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["index"] == 1)
  49. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["count"] == 1)
  50. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["index"] == 2)
  51. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["count"] == -1)
  52. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["index"] == 0)
  53. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["count"] == 1)
  54. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["index"] == 1)
  55. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["count"] == -1)
  56. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["index"] == 0)
  57. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["count"] == 1)
  58. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["index"] == 1)
  59. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["count"] == -1)
  60. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][0]["index"] == 0)
  61. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][0]["count"] == 1)
  62. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][1]["index"] == 1)
  63. predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][1]["count"] == -1)
  64. if not silent: print (fg.CYAN+ style.BRIGHT+ "reflected binding info verification..."+ style.RESET_ALL)
  65. ok = testfuncs.verifyAllPredicates(predicates, j)
  66. return True if ok else False
  67. result = 0 # to define for sub-tests
  68. resultFailed = 0
  69. def doTests(compiler, silent, azdxcpath):
  70. global result
  71. global resultFailed
  72. # Working directory should have been set to this script's directory by the calling parent
  73. # You can get it once doTests() is called, but not during initialization of the module,
  74. # because at that time it will still be set to the working directory of the calling script
  75. workDir = os.getcwd()
  76. if verify(os.path.join(workDir, "../Emission/UnboundedArrays.azsl"), compiler, silent) : result += 1
  77. else: resultFailed += 1
  78. if __name__ == "__main__":
  79. print ("please call from testapp.py")