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.h" 4#include "slang-rhi/shader-cursor.h" 5#include "unit-test/slang-unit-test.h" 6 7#if SLANG_WINDOWS_FAMILY 8#include <d3d12.h> 9#endif 10 11using namespace rhi ; 12 13namespace gfx_test 14{ 15void getBufferHandleTestImpl (IDevice * device ,UnitTestContext * context ) 16{ 17// Create a command queue and encoder to get a command buffer 18ComPtr < ICommandQueue > queue ; 19GFX_CHECK_CALL_ABORT (device -> getQueue (QueueType ::Graphics ,queue .writeRef ())); 20 21ComPtr < ICommandEncoder > encoder ; 22GFX_CHECK_CALL_ABORT (queue -> createCommandEncoder (encoder .writeRef ())); 23 24ComPtr < ICommandBuffer > commandBuffer ; 25GFX_CHECK_CALL_ABORT (encoder -> finish (commandBuffer .writeRef ())); 26 27NativeHandle handle = {}; 28GFX_CHECK_CALL_ABORT (commandBuffer -> getNativeHandle (& handle )); 29if (device -> getInfo ().deviceType == rhi::DeviceType ::Vulkan ) 30 { 31SLANG_CHECK (handle .value != 0 ); 32 } 33#if SLANG_WINDOWS_FAMILY 34else 35 { 36auto d3d12Handle = (ID3D12GraphicsCommandList * )handle .value ; 37Slang ::ComPtr < IUnknown > testHandle1 ; 38GFX_CHECK_CALL_ABORT (d3d12Handle -> QueryInterface < IUnknown > (testHandle1 .writeRef ())); 39Slang ::ComPtr < ID3D12GraphicsCommandList > testHandle2 ; 40GFX_CHECK_CALL_ABORT ( 41d3d12Handle -> QueryInterface < ID3D12GraphicsCommandList > (testHandle2 .writeRef ())); 42SLANG_CHECK (d3d12Handle == testHandle2 .get ()); 43 } 44#endif 45} 46 47void getBufferHandleTestAPI (UnitTestContext * context ,Slang ::RenderApiFlag ::Enum api ) 48{ 49if ((api & context -> enabledApis )== 0 ) 50 { 51SLANG_IGNORE_TEST ; 52 } 53Slang ::ComPtr < IDevice > device ; 54DeviceDesc deviceDesc = {}; 55switch (api ) 56 { 57case Slang ::RenderApiFlag ::D3D11 : 58deviceDesc .deviceType = rhi::DeviceType ::D3D11 ; 59break ; 60case Slang ::RenderApiFlag ::D3D12 : 61deviceDesc .deviceType = rhi::DeviceType ::D3D12 ; 62break ; 63case Slang ::RenderApiFlag ::Vulkan : 64deviceDesc .deviceType = rhi::DeviceType ::Vulkan ; 65break ; 66default : 67SLANG_IGNORE_TEST ; 68 } 69deviceDesc .slang .slangGlobalSession = context -> slangGlobalSession ; 70const char * searchPaths []= {"" ,"../../tools/gfx-unit-test" ,"tools/gfx-unit-test" }; 71deviceDesc .slang .searchPathCount = (SlangInt )SLANG_COUNT_OF (searchPaths ); 72deviceDesc .slang .searchPaths = searchPaths ; 73auto createDeviceResult = getRHI ()-> createDevice (deviceDesc ,device .writeRef ()); 74if (SLANG_FAILED (createDeviceResult )) 75 { 76SLANG_IGNORE_TEST ; 77 } 78// Ignore this test on swiftshader. Swiftshader seems to have a bug that causes the test 79// to crash. 80if (Slang ::String (device -> getInfo ().adapterName ).toLower ().contains ("swiftshader" )) 81 { 82SLANG_IGNORE_TEST ; 83 } 84getBufferHandleTestImpl (device ,context ); 85} 86 87#if SLANG_WINDOWS_FAMILY 88SLANG_UNIT_TEST (getCmdBufferHandleD3D12 ) 89{ 90return getBufferHandleTestAPI (unitTestContext ,Slang ::RenderApiFlag ::D3D12 ); 91} 92#endif 93 94SLANG_UNIT_TEST (getCmdBufferHandleVulkan ) 95{ 96return getBufferHandleTestAPI (unitTestContext ,Slang ::RenderApiFlag ::Vulkan ); 97} 98 99}// namespace gfx_test