diff options
| author | Yong He <yonghe@outlook.com> | 2022-02-11 12:56:17 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-11 12:56:17 -0800 |
| commit | 167300eef147f3008876516a6464196458518ccc (patch) | |
| tree | 12071fa666c58f5f8510501227a7df286ef18f96 /tools/gfx-unit-test/clear-texture-test.cpp | |
| parent | 7d296ba93ff9f01d381dd573160386958457fc18 (diff) | |
gfx: Various Vulkan fixes. (#2129)
* gfx: Various Vulkan fixes.
* Fix test case.
* Fix vulkan crash.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx-unit-test/clear-texture-test.cpp')
| -rw-r--r-- | tools/gfx-unit-test/clear-texture-test.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tools/gfx-unit-test/clear-texture-test.cpp b/tools/gfx-unit-test/clear-texture-test.cpp new file mode 100644 index 000000000..13db72402 --- /dev/null +++ b/tools/gfx-unit-test/clear-texture-test.cpp @@ -0,0 +1,87 @@ +#include "tools/unit-test/slang-unit-test.h" + +#include "slang-gfx.h" +#include "gfx-test-util.h" +#include "tools/gfx-util/shader-cursor.h" +#include "source/core/slang-basic.h" + +using namespace Slang; +using namespace gfx; + +namespace gfx_test +{ + void clearTextureTestImpl(IDevice* device, UnitTestContext* context) + { + Slang::ComPtr<ITransientResourceHeap> transientHeap; + ITransientResourceHeap::Desc transientHeapDesc = {}; + transientHeapDesc.constantBufferSize = 4096; + GFX_CHECK_CALL_ABORT( + device->createTransientResourceHeap(transientHeapDesc, transientHeap.writeRef())); + + ITextureResource::Desc srcTexDesc = {}; + srcTexDesc.type = IResource::Type::Texture2D; + srcTexDesc.numMipLevels = 1; + srcTexDesc.arraySize = 1; + srcTexDesc.size.width = 4; + srcTexDesc.size.height = 4; + srcTexDesc.size.depth = 1; + srcTexDesc.defaultState = ResourceState::RenderTarget; + srcTexDesc.allowedStates = ResourceStateSet( + ResourceState::RenderTarget, + ResourceState::CopySource, + ResourceState::CopyDestination); + srcTexDesc.format = Format::R32G32B32A32_FLOAT; + + Slang::ComPtr<ITextureResource> srcTexture; + GFX_CHECK_CALL_ABORT(device->createTextureResource( + srcTexDesc, nullptr, srcTexture.writeRef())); + + Slang::ComPtr<IResourceView> rtv; + IResourceView::Desc rtvDesc = {}; + rtvDesc.type = IResourceView::Type::RenderTarget; + rtvDesc.format = Format::R32G32B32A32_FLOAT; + rtvDesc.renderTarget.shape = IResource::Type::Texture2D; + rtv = device->createTextureView(srcTexture, rtvDesc); + + { + ICommandQueue::Desc queueDesc = {ICommandQueue::QueueType::Graphics}; + auto queue = device->createCommandQueue(queueDesc); + + auto commandBuffer = transientHeap->createCommandBuffer(); + auto resourceEncoder = commandBuffer->encodeResourceCommands(); + ClearValue clearValue = {}; + clearValue.color.floatValues[0] = 0.5f; + clearValue.color.floatValues[1] = 1.0f; + clearValue.color.floatValues[2] = 0.2f; + clearValue.color.floatValues[3] = 0.1f; + resourceEncoder->clearResourceView(rtv, &clearValue, ClearResourceViewFlags::FloatClearValues); + resourceEncoder->textureBarrier( + srcTexture, ResourceState::RenderTarget, ResourceState::CopySource); + resourceEncoder->endEncoding(); + + commandBuffer->close(); + queue->executeCommandBuffer(commandBuffer); + + queue->waitOnHost(); + + Slang::ComPtr<ISlangBlob> blob; + size_t rowPitch, pixelSize; + device->readTextureResource( + srcTexture, + ResourceState::CopySource, + blob.writeRef(), + &rowPitch, + &pixelSize); + float* data = (float*)blob->getBufferPointer(); + for (int i = 0; i < 4; i++) + { + SLANG_CHECK(data[i] == clearValue.color.floatValues[i]); + } + } + } + + SLANG_UNIT_TEST(clearTextureTestVulkan) + { + runTestImpl(clearTextureTestImpl, unitTestContext, Slang::RenderApiFlag::Vulkan); + } +} |
