summaryrefslogtreecommitdiffstats
path: root/tools/gfx-unit-test/clear-texture-test.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-02-11 12:56:17 -0800
committerGitHub <noreply@github.com>2022-02-11 12:56:17 -0800
commit167300eef147f3008876516a6464196458518ccc (patch)
tree12071fa666c58f5f8510501227a7df286ef18f96 /tools/gfx-unit-test/clear-texture-test.cpp
parent7d296ba93ff9f01d381dd573160386958457fc18 (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.cpp87
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);
+ }
+}