yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Gangzheng TongConvert gfx unit tests and examples to use slang-rhi (#7577)43d0c2100

master
3.2 KiB97 linesraw
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{
17    Slang::ComPtr<ITransientResourceHeap> transientHeap;
18    ITransientResourceHeap::Desc transientHeapDesc = {};
19    transientHeapDesc.constantBufferSize = 4096;
20    GFX_CHECK_CALL_ABORT(
21        device->createTransientResourceHeap(transientHeapDesc, transientHeap.writeRef()));
22
23    ITextureResource::Desc srcTexDesc = {};
24    srcTexDesc.type = IResource::Type::Texture2D;
25    srcTexDesc.numMipLevels = 1;
26    srcTexDesc.arraySize = 1;
27    srcTexDesc.size.width = 4;
28    srcTexDesc.size.height = 4;
29    srcTexDesc.size.depth = 1;
30    srcTexDesc.defaultState = ResourceState::RenderTarget;
31    srcTexDesc.allowedStates = ResourceStateSet(
32        ResourceState::RenderTarget,
33        ResourceState::CopySource,
34        ResourceState::CopyDestination);
35    srcTexDesc.format = Format::R32G32B32A32_FLOAT;
36
37    Slang::ComPtr<ITextureResource> srcTexture;
38    GFX_CHECK_CALL_ABORT(device->createTextureResource(srcTexDesc, nullptr, srcTexture.writeRef()));
39
40    Slang::ComPtr<IResourceView> rtv;
41    IResourceView::Desc rtvDesc = {};
42    rtvDesc.type = IResourceView::Type::RenderTarget;
43    rtvDesc.format = Format::R32G32B32A32_FLOAT;
44    rtvDesc.renderTarget.shape = IResource::Type::Texture2D;
45    rtvDesc.subresourceRange.layerCount = 1;
46    rtvDesc.subresourceRange.mipLevelCount = 1;
47    rtv = device->createTextureView(srcTexture, rtvDesc);
48
49    {
50        ICommandQueue::Desc queueDesc = {ICommandQueue::QueueType::Graphics};
51        auto queue = device->createCommandQueue(queueDesc);
52
53        auto commandBuffer = transientHeap->createCommandBuffer();
54        auto resourceEncoder = commandBuffer->encodeResourceCommands();
55        ClearValue clearValue = {};
56        clearValue.color.floatValues[0] = 0.5f;
57        clearValue.color.floatValues[1] = 1.0f;
58        clearValue.color.floatValues[2] = 0.2f;
59        clearValue.color.floatValues[3] = 0.1f;
60        resourceEncoder->clearResourceView(
61            rtv,
62            &clearValue,
63            ClearResourceViewFlags::FloatClearValues);
64        resourceEncoder->textureBarrier(
65            srcTexture,
66            ResourceState::RenderTarget,
67            ResourceState::CopySource);
68        resourceEncoder->endEncoding();
69
70        commandBuffer->close();
71        queue->executeCommandBuffer(commandBuffer);
72
73        queue->waitOnHost();
74
75        Slang::ComPtr<ISlangBlob> blob;
76        size_t rowPitch, pixelSize;
77        device->readTextureResource(
78            srcTexture,
79            ResourceState::CopySource,
80            blob.writeRef(),
81            &rowPitch,
82            &pixelSize);
83        float* data = (float*)blob->getBufferPointer();
84        for (int i = 0; i < 4; i++)
85        {
86            SLANG_CHECK(data[i] == clearValue.color.floatValues[i]);
87        }
88    }
89}
90
91SLANG_UNIT_TEST(clearTextureTestVulkan)
92{
93    runTestImpl(clearTextureTestImpl, unitTestContext, Slang::RenderApiFlag::Vulkan);
94}
95} // namespace gfx_test
96
97#endif