summaryrefslogtreecommitdiffstats
path: root/tools/render-test/shader-renderer-util.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-04-24 00:17:43 -0700
committerGitHub <noreply@github.com>2021-04-24 00:17:43 -0700
commit9a5672d7b8a155117a2c3f8375e3b8a5b43d91b7 (patch)
tree9be3ea214ea735e41e8fdaef9824e84212a30cbb /tools/render-test/shader-renderer-util.cpp
parent697017e6fae8c252638abc298ec1556de2e41314 (diff)
Remove resource `Usage` from `gfx` interface. (#1813)
* Fix `model-viewer` crash when using Vulkan. Fixing an issue in shader object layout creation for to make sure a correct descriptor set layout is calculated for types that need an implicit constant buffer. * Fix formatting. * Fixes. * Fix memory leak in vulkan. * Remove resource `Usage` from `gfx` interface.
Diffstat (limited to 'tools/render-test/shader-renderer-util.cpp')
-rw-r--r--tools/render-test/shader-renderer-util.cpp66
1 files changed, 35 insertions, 31 deletions
diff --git a/tools/render-test/shader-renderer-util.cpp b/tools/render-test/shader-renderer-util.cpp
index d6441d3ac..6775b4142 100644
--- a/tools/render-test/shader-renderer-util.cpp
+++ b/tools/render-test/shader-renderer-util.cpp
@@ -2,6 +2,8 @@
#include "shader-renderer-util.h"
+#include "tools/gfx/resource-desc-utils.h"
+
namespace renderer_test {
using namespace Slang;
@@ -9,24 +11,23 @@ using Slang::Result;
/* static */ Result ShaderRendererUtil::generateTextureResource(
const InputTextureDesc& inputDesc,
- int bindFlags,
+ ResourceState defaultState,
IDevice* device,
ComPtr<ITextureResource>& textureOut)
{
TextureData texData;
generateTextureData(texData, inputDesc);
- return createTextureResource(inputDesc, texData, bindFlags, device, textureOut);
+ return createTextureResource(inputDesc, texData, defaultState, device, textureOut);
}
/* static */ Result ShaderRendererUtil::createTextureResource(
const InputTextureDesc& inputDesc,
const TextureData& texData,
- int bindFlags,
+ ResourceState defaultState,
IDevice* device,
ComPtr<ITextureResource>& textureOut)
{
- ITextureResource::Desc textureResourceDesc;
- textureResourceDesc.init(IResource::Type::Unknown);
+ ITextureResource::Desc textureResourceDesc = {};
// Default to RGBA_Unorm_UInt8
const Format format = (inputDesc.format == Format::Unknown) ? Format::RGBA_Unorm_UInt8 : inputDesc.format;
@@ -34,7 +35,9 @@ using Slang::Result;
textureResourceDesc.format = format;
textureResourceDesc.numMipLevels = texData.mipLevels;
textureResourceDesc.arraySize = inputDesc.arrayLength;
- textureResourceDesc.bindFlags = bindFlags;
+ textureResourceDesc.allowedStates =
+ ResourceStateSet(defaultState, ResourceState::CopyDestination, ResourceState::CopySource);
+ textureResourceDesc.defaultState = defaultState;
// It's the same size in all dimensions
switch (inputDesc.dimension)
@@ -42,27 +45,32 @@ using Slang::Result;
case 1:
{
textureResourceDesc.type = IResource::Type::Texture1D;
- textureResourceDesc.size.init(inputDesc.size);
+ textureResourceDesc.size.width = inputDesc.size;
+ textureResourceDesc.size.height = 1;
+ textureResourceDesc.size.depth = 1;
+
break;
}
case 2:
{
textureResourceDesc.type = inputDesc.isCube ? IResource::Type::TextureCube : IResource::Type::Texture2D;
- textureResourceDesc.size.init(inputDesc.size, inputDesc.size);
+ textureResourceDesc.size.width = inputDesc.size;
+ textureResourceDesc.size.height = inputDesc.size;
+ textureResourceDesc.size.depth = 1;
break;
}
case 3:
{
textureResourceDesc.type = IResource::Type::Texture3D;
- textureResourceDesc.size.init(inputDesc.size, inputDesc.size, inputDesc.size);
+ textureResourceDesc.size.width = inputDesc.size;
+ textureResourceDesc.size.height = inputDesc.size;
+ textureResourceDesc.size.depth = inputDesc.size;
break;
}
}
- const int effectiveArraySize = textureResourceDesc.calcEffectiveArraySize();
- const int numSubResources = textureResourceDesc.calcNumSubResources();
-
- IResource::Usage initialUsage = IResource::Usage::GenericRead;
+ const int effectiveArraySize = calcEffectiveArraySize(textureResourceDesc);
+ const int numSubResources = calcNumSubResources(textureResourceDesc);
List<ITextureResource::SubresourceData> initSubresources;
int subResourceCounter = 0;
@@ -71,8 +79,8 @@ using Slang::Result;
for( int m = 0; m < textureResourceDesc.numMipLevels; ++m )
{
int subResourceIndex = subResourceCounter++;
- const int mipWidth = ITextureResource::Size::calcMipSize(textureResourceDesc.size.width, m);
- const int mipHeight = ITextureResource::Size::calcMipSize(textureResourceDesc.size.width, m);
+ const int mipWidth = calcMipSize(textureResourceDesc.size.width, m);
+ const int mipHeight = calcMipSize(textureResourceDesc.size.height, m);
auto strideY = mipWidth * sizeof(uint32_t);
auto strideZ = mipHeight * strideY;
@@ -86,7 +94,7 @@ using Slang::Result;
}
}
- textureOut = device->createTextureResource(IResource::Usage::GenericRead, textureResourceDesc, initSubresources.getBuffer());
+ textureOut = device->createTextureResource(textureResourceDesc, initSubresources.getBuffer());
return textureOut ? SLANG_OK : SLANG_FAIL;
}
@@ -98,23 +106,19 @@ using Slang::Result;
IDevice* device,
Slang::ComPtr<IBufferResource>& bufferOut)
{
- IResource::Usage initialUsage = IResource::Usage::GenericRead;
-
IBufferResource::Desc srcDesc;
- srcDesc.init(bufferSize);
+ srcDesc.type = IResource::Type::Buffer;
+ srcDesc.sizeInBytes = bufferSize;
srcDesc.format = inputDesc.format;
-
- int bindFlags = 0;
- {
- bindFlags |= IResource::BindFlag::UnorderedAccess | IResource::BindFlag::PixelShaderResource | IResource::BindFlag::NonPixelShaderResource;
- srcDesc.elementSize = inputDesc.stride;
- initialUsage = IResource::Usage::UnorderedAccess;
- }
-
- srcDesc.bindFlags = bindFlags;
-
- ComPtr<IBufferResource> bufferResource =
- device->createBufferResource(initialUsage, srcDesc, initData);
+ srcDesc.elementSize = inputDesc.stride;
+ srcDesc.defaultState = ResourceState::UnorderedAccess;
+ srcDesc.allowedStates = ResourceStateSet(
+ ResourceState::CopyDestination,
+ ResourceState::CopySource,
+ ResourceState::UnorderedAccess,
+ ResourceState::ShaderResource);
+
+ ComPtr<IBufferResource> bufferResource = device->createBufferResource(srcDesc, initData);
if (!bufferResource)
{
return SLANG_FAIL;