From 9a5672d7b8a155117a2c3f8375e3b8a5b43d91b7 Mon Sep 17 00:00:00 2001 From: Yong He Date: Sat, 24 Apr 2021 00:17:43 -0700 Subject: 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. --- tools/render-test/shader-renderer-util.cpp | 66 ++++++++++++++++-------------- 1 file changed, 35 insertions(+), 31 deletions(-) (limited to 'tools/render-test/shader-renderer-util.cpp') 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& 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& 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 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& 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 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 bufferResource = device->createBufferResource(srcDesc, initData); if (!bufferResource) { return SLANG_FAIL; -- cgit v1.2.3