yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
43d0c2100
master
1#include "core/slang-basic.h" 2#include "gfx-test-util.h" 3#include "slang-rhi/shader-cursor.h" 4#include "unit-test/slang-unit-test.h" 5 6#include <slang-rhi.h> 7 8#if SLANG_WINDOWS_FAMILY 9#include <d3d12.h> 10#endif 11 12using namespace rhi ; 13 14namespace gfx_test 15{ 16void getBufferResourceHandleTestImpl (IDevice * device ,UnitTestContext * context ) 17{ 18const int numberCount = 1 ; 19BufferDesc bufferDesc = {}; 20bufferDesc .size = numberCount * sizeof (float ); 21bufferDesc .format = rhi::Format ::Undefined ; 22bufferDesc .elementSize = sizeof (float ); 23bufferDesc .defaultState = ResourceState ::UnorderedAccess ; 24bufferDesc .memoryType = MemoryType ::DeviceLocal ; 25bufferDesc .usage = BufferUsage ::UnorderedAccess |BufferUsage ::ShaderResource | 26BufferUsage ::CopySource |BufferUsage ::CopyDestination ; 27 28ComPtr < IBuffer > buffer ; 29GFX_CHECK_CALL_ABORT (device -> createBuffer (bufferDesc ,nullptr ,buffer .writeRef ())); 30 31NativeHandle handle ; 32GFX_CHECK_CALL_ABORT (buffer -> getNativeHandle (& handle )); 33if (device -> getInfo ().deviceType == rhi::DeviceType ::Vulkan ) 34 { 35SLANG_CHECK (handle .value != 0 ); 36 } 37#if SLANG_WINDOWS_FAMILY 38else 39 { 40auto d3d12Handle = (ID3D12Resource * )handle .value ; 41Slang ::ComPtr < IUnknown > testHandle1 ; 42GFX_CHECK_CALL_ABORT (d3d12Handle -> QueryInterface < IUnknown > (testHandle1 .writeRef ())); 43Slang ::ComPtr < ID3D12Resource > testHandle2 ; 44GFX_CHECK_CALL_ABORT (testHandle1 -> QueryInterface < ID3D12Resource > (testHandle2 .writeRef ())); 45SLANG_CHECK (d3d12Handle == testHandle2 .get ()); 46 } 47#endif 48} 49 50void getBufferResourceHandleTestAPI (UnitTestContext * context ,Slang ::RenderApiFlag ::Enum api ) 51{ 52if (context -> enableDebugLayers ) 53getRHI ()-> enableDebugLayers (); 54if ((api & context -> enabledApis )== 0 ) 55 { 56SLANG_IGNORE_TEST ; 57 } 58Slang ::ComPtr < IDevice > device ; 59DeviceDesc deviceDesc = {}; 60switch (api ) 61 { 62case Slang ::RenderApiFlag ::D3D11 : 63deviceDesc .deviceType = rhi::DeviceType ::D3D11 ; 64break ; 65case Slang ::RenderApiFlag ::D3D12 : 66deviceDesc .deviceType = rhi::DeviceType ::D3D12 ; 67break ; 68case Slang ::RenderApiFlag ::Vulkan : 69deviceDesc .deviceType = rhi::DeviceType ::Vulkan ; 70break ; 71default : 72SLANG_IGNORE_TEST ; 73 } 74deviceDesc .slang .slangGlobalSession = context -> slangGlobalSession ; 75const char * searchPaths []= {"" ,"../../tools/gfx-unit-test" ,"tools/gfx-unit-test" }; 76deviceDesc .slang .searchPathCount = (SlangInt )SLANG_COUNT_OF (searchPaths ); 77deviceDesc .slang .searchPaths = searchPaths ; 78auto createDeviceResult = getRHI ()-> createDevice (deviceDesc ,device .writeRef ()); 79if (SLANG_FAILED (createDeviceResult )) 80 { 81SLANG_IGNORE_TEST ; 82 } 83// Ignore this test on swiftshader. Swiftshader seems to have a bug that causes the test 84// to crash. 85if (Slang ::String (device -> getInfo ().adapterName ).toLower ().contains ("swiftshader" )) 86 { 87SLANG_IGNORE_TEST ; 88 } 89 90getBufferResourceHandleTestImpl (device ,context ); 91} 92 93SLANG_UNIT_TEST (getBufferResourceHandleD3D12 ) 94{ 95return getBufferResourceHandleTestAPI (unitTestContext ,Slang ::RenderApiFlag ::D3D12 ); 96} 97 98SLANG_UNIT_TEST (getBufferResourceHandleVulkan ) 99{ 100return getBufferResourceHandleTestAPI (unitTestContext ,Slang ::RenderApiFlag ::Vulkan ); 101} 102 103}// namespace gfx_test