yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
43d0c2100
master
1#if 0 2// Duplicated: this is covered by slang-rhi\tests\test-cmd-clear-texture.cpp 3 4#include "core/slang-basic.h" 5#include "gfx-test-util.h" 6#include "slang-gfx.h" 7#include "slang-rhi/shader-cursor.h" 8#include "unit-test/slang-unit-test.h" 9 10using namespace Slang ; 11using namespace gfx ; 12 13namespace gfx_test 14{ 15void clearTextureTestImpl (IDevice * device ,UnitTestContext * context ) 16{ 17Slang ::ComPtr < ITransientResourceHeap > transientHeap ; 18ITransientResourceHeap ::Desc transientHeapDesc = {}; 19transientHeapDesc .constantBufferSize = 4096 ; 20GFX_CHECK_CALL_ABORT ( 21device -> createTransientResourceHeap (transientHeapDesc ,transientHeap .writeRef ())); 22 23ITextureResource ::Desc srcTexDesc = {}; 24srcTexDesc .type = IResource ::Type ::Texture2D ; 25srcTexDesc .numMipLevels = 1 ; 26srcTexDesc .arraySize = 1 ; 27srcTexDesc .size .width = 4 ; 28srcTexDesc .size .height = 4 ; 29srcTexDesc .size .depth = 1 ; 30srcTexDesc .defaultState = ResourceState ::RenderTarget ; 31srcTexDesc .allowedStates = ResourceStateSet ( 32ResourceState ::RenderTarget , 33ResourceState ::CopySource , 34ResourceState ::CopyDestination ); 35srcTexDesc .format = Format ::R32G32B32A32_FLOAT ; 36 37Slang ::ComPtr < ITextureResource > srcTexture ; 38GFX_CHECK_CALL_ABORT (device -> createTextureResource (srcTexDesc ,nullptr ,srcTexture .writeRef ())); 39 40Slang ::ComPtr < IResourceView > rtv ; 41IResourceView ::Desc rtvDesc = {}; 42rtvDesc .type = IResourceView ::Type ::RenderTarget ; 43rtvDesc .format = Format ::R32G32B32A32_FLOAT ; 44rtvDesc .renderTarget .shape = IResource ::Type ::Texture2D ; 45rtvDesc .subresourceRange .layerCount = 1 ; 46rtvDesc .subresourceRange .mipLevelCount = 1 ; 47rtv = device -> createTextureView (srcTexture ,rtvDesc ); 48 49 { 50ICommandQueue ::Desc queueDesc = {ICommandQueue ::QueueType ::Graphics }; 51auto queue = device -> createCommandQueue (queueDesc ); 52 53auto commandBuffer = transientHeap -> createCommandBuffer (); 54auto resourceEncoder = commandBuffer -> encodeResourceCommands (); 55ClearValue clearValue = {}; 56clearValue .color .floatValues [0 ]= 0.5f ; 57clearValue .color .floatValues [1 ]= 1.0f ; 58clearValue .color .floatValues [2 ]= 0.2f ; 59clearValue .color .floatValues [3 ]= 0.1f ; 60resourceEncoder -> clearResourceView ( 61rtv , 62& clearValue , 63ClearResourceViewFlags ::FloatClearValues ); 64resourceEncoder -> textureBarrier ( 65srcTexture , 66ResourceState ::RenderTarget , 67ResourceState ::CopySource ); 68resourceEncoder -> endEncoding (); 69 70commandBuffer -> close (); 71queue -> executeCommandBuffer (commandBuffer ); 72 73queue -> waitOnHost (); 74 75Slang ::ComPtr < ISlangBlob > blob ; 76size_t rowPitch ,pixelSize ; 77device -> readTextureResource ( 78srcTexture , 79ResourceState ::CopySource , 80blob .writeRef (), 81& rowPitch , 82& pixelSize ); 83float * data = (float * )blob -> getBufferPointer (); 84for (int i = 0 ;i < 4 ;i ++ ) 85 { 86SLANG_CHECK (data [i ]== clearValue .color .floatValues [i ]); 87 } 88 } 89} 90 91SLANG_UNIT_TEST (clearTextureTestVulkan ) 92{ 93runTestImpl (clearTextureTestImpl ,unitTestContext ,Slang ::RenderApiFlag ::Vulkan ); 94} 95}// namespace gfx_test 96 97#endif