summaryrefslogtreecommitdiffstats
path: root/tools/gfx
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-11-17 13:20:13 -0800
committerGitHub <noreply@github.com>2021-11-17 13:20:13 -0800
commitefebfada38cd5252da62f7618c7f95e3ab180fbd (patch)
treeca36ae2cb1e1046666103c678ab9a8e766b53efb /tools/gfx
parent763d0b5acb584a4d2eca5e02922afed7d499141e (diff)
gfx ShaderObject interface update, getTextureAllocationInfo() (#2019)
* gfx ShaderObject interface update, getTextureAllocationInfo() * Fix render-vk compiler warnings and errors. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx')
-rw-r--r--tools/gfx/cpu/render-cpu.cpp11
-rw-r--r--tools/gfx/cuda/render-cuda.cpp11
-rw-r--r--tools/gfx/d3d11/render-d3d11.cpp10
-rw-r--r--tools/gfx/d3d12/render-d3d12.cpp64
-rw-r--r--tools/gfx/debug-layer.cpp25
-rw-r--r--tools/gfx/debug-layer.h6
-rw-r--r--tools/gfx/mutable-shader-object.h8
-rw-r--r--tools/gfx/open-gl/render-gl.cpp10
-rw-r--r--tools/gfx/renderer-shared.cpp9
-rw-r--r--tools/gfx/renderer-shared.h14
-rw-r--r--tools/gfx/vulkan/render-vk.cpp135
-rw-r--r--tools/gfx/vulkan/vk-util.h26
12 files changed, 285 insertions, 44 deletions
diff --git a/tools/gfx/cpu/render-cpu.cpp b/tools/gfx/cpu/render-cpu.cpp
index ccc7a4abd..15014f6e9 100644
--- a/tools/gfx/cpu/render-cpu.cpp
+++ b/tools/gfx/cpu/render-cpu.cpp
@@ -844,6 +844,17 @@ public:
*outEntryPoint = nullptr;
return SLANG_OK;
}
+
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return m_data.getBuffer();
+ }
+
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return (size_t)m_data.getCount();
+ }
+
virtual SLANG_NO_THROW Result SLANG_MCALL
setData(ShaderOffset const& offset, void const* data, size_t size) override
{
diff --git a/tools/gfx/cuda/render-cuda.cpp b/tools/gfx/cuda/render-cuda.cpp
index 020cd82f2..be3379c71 100644
--- a/tools/gfx/cuda/render-cuda.cpp
+++ b/tools/gfx/cuda/render-cuda.cpp
@@ -557,6 +557,17 @@ public:
*outEntryPoint = nullptr;
return SLANG_OK;
}
+
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return m_data.getBuffer();
+ }
+
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return (size_t)m_data.getCount();
+ }
+
virtual SLANG_NO_THROW Result SLANG_MCALL
setData(ShaderOffset const& offset, void const* data, size_t size) override
{
diff --git a/tools/gfx/d3d11/render-d3d11.cpp b/tools/gfx/d3d11/render-d3d11.cpp
index b2bd042e6..304c0c91e 100644
--- a/tools/gfx/d3d11/render-d3d11.cpp
+++ b/tools/gfx/d3d11/render-d3d11.cpp
@@ -1240,6 +1240,16 @@ protected:
return SLANG_OK;
}
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return m_data.getBuffer();
+ }
+
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return (size_t)m_data.getCount();
+ }
+
SLANG_NO_THROW Result SLANG_MCALL
setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE
{
diff --git a/tools/gfx/d3d12/render-d3d12.cpp b/tools/gfx/d3d12/render-d3d12.cpp
index 029aee4c6..0d9c94710 100644
--- a/tools/gfx/d3d12/render-d3d12.cpp
+++ b/tools/gfx/d3d12/render-d3d12.cpp
@@ -80,6 +80,8 @@ public:
WindowHandle window,
ISwapchain** outSwapchain) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment) override;
virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource(
const ITextureResource::Desc& desc,
const ITextureResource::SubresourceData* initData,
@@ -2079,6 +2081,16 @@ public:
return SLANG_OK;
}
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return m_data.getBuffer();
+ }
+
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return (size_t)m_data.getCount();
+ }
+
SLANG_NO_THROW Result SLANG_MCALL
setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE
{
@@ -4789,13 +4801,8 @@ static D3D12_RESOURCE_DIMENSION _calcResourceDimension(IResource::Type type)
}
}
-Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, const ITextureResource::SubresourceData* initData, ITextureResource** outResource)
+Result setupResourceDesc(D3D12_RESOURCE_DESC& resourceDesc, const ITextureResource::Desc& srcDesc)
{
- // Description of uploading on Dx12
- // https://msdn.microsoft.com/en-us/library/windows/desktop/dn899215%28v=vs.85%29.aspx
-
- TextureResource::Desc srcDesc = fixupTextureDesc(descIn);
-
const DXGI_FORMAT pixelFormat = D3DUtil::getMapFormat(srcDesc.format);
if (pixelFormat == DXGI_FORMAT_UNKNOWN)
{
@@ -4811,10 +4818,6 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn,
}
const int numMipMaps = srcDesc.numMipLevels;
-
- // Setup desc
- D3D12_RESOURCE_DESC resourceDesc;
-
resourceDesc.Dimension = dimension;
resourceDesc.Format = pixelFormat;
resourceDesc.Width = srcDesc.size.width;
@@ -4832,6 +4835,33 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn,
resourceDesc.Alignment = 0;
+ return SLANG_OK;
+}
+
+Result D3D12Device::getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment)
+{
+ TextureResource::Desc srcDesc = fixupTextureDesc(desc);
+ D3D12_RESOURCE_DESC resourceDesc = {};
+ setupResourceDesc(resourceDesc, srcDesc);
+ auto allocInfo = m_device->GetResourceAllocationInfo(0xFF, 1, &resourceDesc);
+ *outSize = allocInfo.SizeInBytes;
+ *outAlignment = allocInfo.Alignment;
+ return SLANG_OK;
+}
+
+Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, const ITextureResource::SubresourceData* initData, ITextureResource** outResource)
+{
+ // Description of uploading on Dx12
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/dn899215%28v=vs.85%29.aspx
+
+ TextureResource::Desc srcDesc = fixupTextureDesc(descIn);
+
+ D3D12_RESOURCE_DESC resourceDesc = {};
+ setupResourceDesc(resourceDesc, srcDesc);
+ const int arraySize = calcEffectiveArraySize(srcDesc);
+ const int numMipMaps = srcDesc.numMipLevels;
+
RefPtr<TextureResourceImpl> texture(new TextureResourceImpl(srcDesc));
// Create the target resource
@@ -4851,7 +4881,7 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn,
{
clearValuePtr = nullptr;
}
- clearValue.Format = pixelFormat;
+ clearValue.Format = resourceDesc.Format;
memcpy(clearValue.Color, &descIn.optimalClearValue.color, sizeof(clearValue.Color));
clearValue.DepthStencil.Depth = descIn.optimalClearValue.depthStencil.depth;
clearValue.DepthStencil.Stencil = descIn.optimalClearValue.depthStencil.stencil;
@@ -4870,13 +4900,21 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn,
List<D3D12_PLACED_SUBRESOURCE_FOOTPRINT> layouts;
layouts.setCount(numMipMaps);
List<UInt64> mipRowSizeInBytes;
- mipRowSizeInBytes.setCount(numMipMaps);
+ mipRowSizeInBytes.setCount(srcDesc.numMipLevels);
List<UInt32> mipNumRows;
mipNumRows.setCount(numMipMaps);
// NOTE! This is just the size for one array upload -> not for the whole texture
UInt64 requiredSize = 0;
- m_device->GetCopyableFootprints(&resourceDesc, 0, numMipMaps, 0, layouts.begin(), mipNumRows.begin(), mipRowSizeInBytes.begin(), &requiredSize);
+ m_device->GetCopyableFootprints(
+ &resourceDesc,
+ 0,
+ srcDesc.numMipLevels,
+ 0,
+ layouts.begin(),
+ mipNumRows.begin(),
+ mipRowSizeInBytes.begin(),
+ &requiredSize);
// Sub resource indexing
// https://msdn.microsoft.com/en-us/library/windows/desktop/dn705766(v=vs.85).aspx#subresource_indexing
diff --git a/tools/gfx/debug-layer.cpp b/tools/gfx/debug-layer.cpp
index 5b4ee981c..99eaf5c00 100644
--- a/tools/gfx/debug-layer.cpp
+++ b/tools/gfx/debug-layer.cpp
@@ -770,6 +770,13 @@ Result DebugDevice::waitForFences(
return baseObject->waitForFences(fenceCount, fences, values, waitForAll, timeout);
}
+Result DebugDevice::getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment)
+{
+ SLANG_GFX_API_FUNC;
+ return baseObject->getTextureAllocationInfo(desc, outSize, outAlignment);
+}
+
IResource::Type DebugBufferResource::getType()
{
SLANG_GFX_API_FUNC;
@@ -1631,6 +1638,24 @@ Result DebugShaderObject::copyFrom(IShaderObject* other)
return baseObject->copyFrom(getInnerObj(other));
}
+const void* DebugShaderObject::getRawData()
+{
+ SLANG_GFX_API_FUNC;
+ return baseObject->getRawData();
+}
+
+size_t DebugShaderObject::getSize()
+{
+ SLANG_GFX_API_FUNC;
+ return baseObject->getSize();
+}
+
+Result DebugShaderObject::setConstantBufferOverride(IBufferResource* constantBuffer)
+{
+ SLANG_GFX_API_FUNC;
+ return baseObject->setConstantBufferOverride(getInnerObj(constantBuffer));
+}
+
DebugObjectBase::DebugObjectBase()
{
static uint64_t uidCounter = 0;
diff --git a/tools/gfx/debug-layer.h b/tools/gfx/debug-layer.h
index 87f7b009d..7ff5e02d5 100644
--- a/tools/gfx/debug-layer.h
+++ b/tools/gfx/debug-layer.h
@@ -150,6 +150,8 @@ public:
uint64_t* values,
bool waitForAll,
uint64_t timeout) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment) override;
};
class DebugQueryPool : public DebugObject<IQueryPool>
@@ -279,6 +281,10 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL getCurrentVersion(
ITransientResourceHeap* transientHeap, IShaderObject** outObject) override;
virtual SLANG_NO_THROW Result SLANG_MCALL copyFrom(IShaderObject* other) override;
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override;
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ setConstantBufferOverride(IBufferResource* constantBuffer) override;
public:
Slang::String m_typeName;
diff --git a/tools/gfx/mutable-shader-object.h b/tools/gfx/mutable-shader-object.h
index 17c025580..3c551023a 100644
--- a/tools/gfx/mutable-shader-object.h
+++ b/tools/gfx/mutable-shader-object.h
@@ -115,6 +115,14 @@ namespace gfx
return SLANG_OK;
}
public:
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return this->m_data.getBuffer();
+ }
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return this->m_data.getCount();
+ }
virtual SLANG_NO_THROW Result SLANG_MCALL setData(ShaderOffset const& offset, void const* data, size_t size) override
{
if (!size) return SLANG_OK;
diff --git a/tools/gfx/open-gl/render-gl.cpp b/tools/gfx/open-gl/render-gl.cpp
index afcb8c781..e007232d9 100644
--- a/tools/gfx/open-gl/render-gl.cpp
+++ b/tools/gfx/open-gl/render-gl.cpp
@@ -955,6 +955,16 @@ public:
return static_cast<ShaderObjectLayoutImpl*>(m_layout.Ptr());
}
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return m_data.getBuffer();
+ }
+
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return (size_t)m_data.getCount();
+ }
+
SLANG_NO_THROW Result SLANG_MCALL
setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE
{
diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp
index 705f1f95d..5b2dc949b 100644
--- a/tools/gfx/renderer-shared.cpp
+++ b/tools/gfx/renderer-shared.cpp
@@ -450,6 +450,15 @@ Result RendererBase::waitForFences(
return SLANG_E_NOT_AVAILABLE;
}
+Result RendererBase::getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment)
+{
+ SLANG_UNUSED(desc);
+ *outSize = 0;
+ *outAlignment = 0;
+ return SLANG_E_NOT_AVAILABLE;
+}
+
Result RendererBase::getShaderObjectLayout(
slang::TypeReflection* type,
ShaderObjectContainerType container,
diff --git a/tools/gfx/renderer-shared.h b/tools/gfx/renderer-shared.h
index eeb10b527..abbeb285f 100644
--- a/tools/gfx/renderer-shared.h
+++ b/tools/gfx/renderer-shared.h
@@ -542,6 +542,16 @@ public:
SLANG_UNUSED(other);
return SLANG_E_NOT_AVAILABLE;
}
+
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return nullptr;
+ }
+
+ virtual SLANG_NO_THROW Result SLANG_MCALL setConstantBufferOverride(IBufferResource* outBuffer) override
+ {
+ return SLANG_E_NOT_AVAILABLE;
+ }
};
template<typename TShaderObjectImpl, typename TShaderObjectLayoutImpl, typename TShaderObjectData>
@@ -1241,6 +1251,10 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL
waitForFences(uint32_t fenceCount, IFence** fences, uint64_t* fenceValues, bool waitForAll, uint64_t timeout) override;
+ // Provides a default implementation that returns SLANG_E_NOT_AVAILABLE.
+ virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment) override;
+
Result getShaderObjectLayout(
slang::TypeReflection* type,
ShaderObjectContainerType container,
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp
index 836e4e19e..ce553f0c4 100644
--- a/tools/gfx/vulkan/render-vk.cpp
+++ b/tools/gfx/vulkan/render-vk.cpp
@@ -140,7 +140,11 @@ public:
const IAccelerationStructure::CreateDesc& desc,
IAccelerationStructure** outView) override;
+ virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo(
+ const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment) override;
+
void waitForGpu();
+
virtual SLANG_NO_THROW const DeviceInfo& SLANG_MCALL getDeviceInfo() const override
{
return m_info;
@@ -2345,6 +2349,16 @@ public:
return SLANG_OK;
}
+ virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override
+ {
+ return m_data.getBuffer();
+ }
+
+ virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override
+ {
+ return (size_t)m_data.getCount();
+ }
+
SLANG_NO_THROW Result SLANG_MCALL
setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE
{
@@ -4213,7 +4227,7 @@ public:
size_t count,
ITextureResource* const* textures,
ResourceState src,
- ResourceState dst)
+ ResourceState dst) override
{
List<VkImageMemoryBarrier> barriers;
barriers.setCount(count);
@@ -4228,7 +4242,12 @@ public:
barrier.image = image->m_image;
barrier.oldLayout = translateImageLayout(src);
barrier.newLayout = translateImageLayout(dst);
- barrier.subresourceRange.aspectMask;
+ if (VulkanUtil::isDepthFormat(image->m_vkformat))
+ barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
+ if (VulkanUtil::isStencilFormat(image->m_vkformat))
+ barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
+ if (barrier.subresourceRange.aspectMask == 0)
+ barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
barrier.subresourceRange.baseArrayLayer = 0;
barrier.subresourceRange.baseMipLevel = 0;
barrier.subresourceRange.layerCount = desc->arraySize;
@@ -4248,7 +4267,7 @@ public:
size_t count,
IBufferResource* const* buffers,
ResourceState src,
- ResourceState dst)
+ ResourceState dst) override
{
List<VkBufferMemoryBarrier> barriers;
barriers.reserve(count);
@@ -6455,32 +6474,6 @@ static VkImageUsageFlags _calcImageUsageFlags(
return usage;
}
-bool isDepthFormat(VkFormat format)
-{
- switch (format)
- {
- case VK_FORMAT_D16_UNORM:
- case VK_FORMAT_D24_UNORM_S8_UINT:
- case VK_FORMAT_X8_D24_UNORM_PACK32:
- case VK_FORMAT_D32_SFLOAT:
- case VK_FORMAT_D32_SFLOAT_S8_UINT:
- return true;
- }
- return false;
-}
-
-bool isStencilFormat(VkFormat format)
-{
- switch (format)
- {
- case VK_FORMAT_S8_UINT:
- case VK_FORMAT_D24_UNORM_S8_UINT:
- case VK_FORMAT_D32_SFLOAT_S8_UINT:
- return true;
- }
- return false;
-}
-
void VKDevice::_transitionImageLayout(VkImage image, VkFormat format, const TextureResource::Desc& desc, VkImageLayout oldLayout, VkImageLayout newLayout)
{
VkImageMemoryBarrier barrier = {};
@@ -6491,9 +6484,9 @@ void VKDevice::_transitionImageLayout(VkImage image, VkFormat format, const Text
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
barrier.image = image;
- if (isDepthFormat(format))
+ if (VulkanUtil::isDepthFormat(format))
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
- if (isStencilFormat(format))
+ if (VulkanUtil::isStencilFormat(format))
barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
if (barrier.subresourceRange.aspectMask == 0)
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
@@ -6605,6 +6598,86 @@ size_t calcNumRows(Format format, int height)
return (size_t)(height + sizeInfo.blockHeight - 1) / sizeInfo.blockHeight;
}
+Result VKDevice::getTextureAllocationInfo(
+ const ITextureResource::Desc& descIn, size_t* outSize, size_t* outAlignment)
+{
+ TextureResource::Desc desc = fixupTextureDesc(descIn);
+
+ const VkFormat format = VulkanUtil::getVkFormat(desc.format);
+ if (format == VK_FORMAT_UNDEFINED)
+ {
+ assert(!"Unhandled image format");
+ return SLANG_FAIL;
+ }
+ const int arraySize = calcEffectiveArraySize(desc);
+
+ VkImageCreateInfo imageInfo = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO};
+ switch (desc.type)
+ {
+ case IResource::Type::Texture1D:
+ {
+ imageInfo.imageType = VK_IMAGE_TYPE_1D;
+ imageInfo.extent = VkExtent3D{uint32_t(descIn.size.width), 1, 1};
+ break;
+ }
+ case IResource::Type::Texture2D:
+ {
+ imageInfo.imageType = VK_IMAGE_TYPE_2D;
+ imageInfo.extent =
+ VkExtent3D{uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1};
+ break;
+ }
+ case IResource::Type::TextureCube:
+ {
+ imageInfo.imageType = VK_IMAGE_TYPE_2D;
+ imageInfo.extent =
+ VkExtent3D{uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1};
+ imageInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
+ break;
+ }
+ case IResource::Type::Texture3D:
+ {
+ // Can't have an array and 3d texture
+ assert(desc.arraySize <= 1);
+
+ imageInfo.imageType = VK_IMAGE_TYPE_3D;
+ imageInfo.extent = VkExtent3D{
+ uint32_t(descIn.size.width),
+ uint32_t(descIn.size.height),
+ uint32_t(descIn.size.depth)};
+ break;
+ }
+ default:
+ {
+ assert(!"Unhandled type");
+ return SLANG_FAIL;
+ }
+ }
+
+ imageInfo.mipLevels = desc.numMipLevels;
+ imageInfo.arrayLayers = arraySize;
+
+ imageInfo.format = format;
+
+ imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+ imageInfo.usage = _calcImageUsageFlags(desc.allowedStates, desc.cpuAccessFlags, nullptr);
+ imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
+
+ imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+
+ VkImage image;
+ SLANG_VK_RETURN_ON_FAIL(m_api.vkCreateImage(m_device, &imageInfo, nullptr, &image));
+
+ VkMemoryRequirements memRequirements;
+ m_api.vkGetImageMemoryRequirements(m_device, image, &memRequirements);
+
+ *outSize = memRequirements.size;
+ *outAlignment = memRequirements.alignment;
+
+ m_api.vkDestroyImage(m_device, image, nullptr);
+ return SLANG_OK;
+}
+
Result VKDevice::createTextureResource(const ITextureResource::Desc& descIn, const ITextureResource::SubresourceData* initData, ITextureResource** outResource)
{
TextureResource::Desc desc = fixupTextureDesc(descIn);
diff --git a/tools/gfx/vulkan/vk-util.h b/tools/gfx/vulkan/vk-util.h
index 450e78ebd..95f463a7a 100644
--- a/tools/gfx/vulkan/vk-util.h
+++ b/tools/gfx/vulkan/vk-util.h
@@ -45,6 +45,32 @@ struct VulkanUtil
static VkPipelineBindPoint getPipelineBindPoint(PipelineType pipelineType);
static VkImageLayout getImageLayoutFromState(ResourceState state);
+
+ static inline bool isDepthFormat(VkFormat format)
+ {
+ switch (format)
+ {
+ case VK_FORMAT_D16_UNORM:
+ case VK_FORMAT_D24_UNORM_S8_UINT:
+ case VK_FORMAT_X8_D24_UNORM_PACK32:
+ case VK_FORMAT_D32_SFLOAT:
+ case VK_FORMAT_D32_SFLOAT_S8_UINT:
+ return true;
+ }
+ return false;
+ }
+
+ static inline bool isStencilFormat(VkFormat format)
+ {
+ switch (format)
+ {
+ case VK_FORMAT_S8_UINT:
+ case VK_FORMAT_D24_UNORM_S8_UINT:
+ case VK_FORMAT_D32_SFLOAT_S8_UINT:
+ return true;
+ }
+ return false;
+ }
};
struct AccelerationStructureBuildGeometryInfoBuilder