summaryrefslogtreecommitdiffstats
path: root/tools/gfx/vulkan/render-vk.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-11-18 11:14:29 -0800
committerGitHub <noreply@github.com>2021-11-18 11:14:29 -0800
commitb482844b689eb109ee1d70c527e098400ac6d409 (patch)
treef40e332e366b2dd2193d817c0c7d0bdc95455c90 /tools/gfx/vulkan/render-vk.cpp
parentefebfada38cd5252da62f7618c7f95e3ab180fbd (diff)
gfx: add coverage for more resource commands. (#2020)
* gfx: specify SubresourceRange for resource view creation. * Add gfx method for `resolveResource`. * Fix compile error. * `copyTextureToBuffer` and `textureSubresourceBarrier`. * Fix vulkan bug. * Fix test cras;h. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx/vulkan/render-vk.cpp')
-rw-r--r--tools/gfx/vulkan/render-vk.cpp85
1 files changed, 75 insertions, 10 deletions
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp
index ce553f0c4..7dde2b712 100644
--- a/tools/gfx/vulkan/render-vk.cpp
+++ b/tools/gfx/vulkan/render-vk.cpp
@@ -4330,10 +4330,10 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL copyTexture(
ITextureResource* dst,
- ITextureResource::SubresourceRange dstSubresource,
+ SubresourceRange dstSubresource,
ITextureResource::Offset3D dstOffset,
ITextureResource* src,
- ITextureResource::SubresourceRange srcSubresource,
+ SubresourceRange srcSubresource,
ITextureResource::Offset3D srcOffset,
ITextureResource::Size extent) override
{
@@ -4349,7 +4349,7 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL uploadTextureData(
ITextureResource* dst,
- ITextureResource::SubresourceRange subResourceRange,
+ SubresourceRange subResourceRange,
ITextureResource::Offset3D offset,
ITextureResource::Offset3D extend,
ITextureResource::SubresourceData* subResourceData,
@@ -4374,6 +4374,51 @@ public:
SLANG_UNUSED(flags);
SLANG_UNIMPLEMENTED_X("clearResourceView");
}
+
+ virtual SLANG_NO_THROW void SLANG_MCALL resolveResource(
+ ITextureResource* source,
+ SubresourceRange sourceRange,
+ ITextureResource* dest,
+ SubresourceRange destRange) override
+ {
+ SLANG_UNUSED(source);
+ SLANG_UNUSED(sourceRange);
+ SLANG_UNUSED(dest);
+ SLANG_UNUSED(destRange);
+ SLANG_UNIMPLEMENTED_X("resolveResource");
+ }
+
+ virtual SLANG_NO_THROW void SLANG_MCALL copyTextureToBuffer(
+ IBufferResource* dst,
+ size_t dstOffset,
+ size_t dstSize,
+ ITextureResource* src,
+ SubresourceRange srcSubresource,
+ ITextureResource::Offset3D srcOffset,
+ ITextureResource::Size extent) override
+ {
+ SLANG_UNUSED(dst);
+ SLANG_UNUSED(dstOffset);
+ SLANG_UNUSED(dstSize);
+ SLANG_UNUSED(src);
+ SLANG_UNUSED(srcSubresource);
+ SLANG_UNUSED(srcOffset);
+ SLANG_UNUSED(extent);
+ SLANG_UNIMPLEMENTED_X("copyTextureToBuffer");
+ }
+
+ virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier(
+ ITextureResource* texture,
+ SubresourceRange subresourceRange,
+ ResourceState src,
+ ResourceState dst) override
+ {
+ SLANG_UNUSED(texture);
+ SLANG_UNUSED(subresourceRange);
+ SLANG_UNUSED(src);
+ SLANG_UNUSED(dst);
+ SLANG_UNIMPLEMENTED_X("textureSubresourceBarrier");
+ }
};
RefPtr<ResourceCommandEncoder> m_resourceCommandEncoder;
@@ -7183,10 +7228,14 @@ Result VKDevice::createTextureView(ITextureResource* texture, IResourceView::Des
break;
}
createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
- createInfo.subresourceRange.baseArrayLayer = 0;
- createInfo.subresourceRange.baseMipLevel = 0;
- createInfo.subresourceRange.layerCount = VK_REMAINING_ARRAY_LAYERS;
- createInfo.subresourceRange.levelCount = VK_REMAINING_MIP_LEVELS;
+ createInfo.subresourceRange.baseArrayLayer = desc.subresourceRange.baseArrayLayer;
+ createInfo.subresourceRange.baseMipLevel = desc.subresourceRange.mipLevel;
+ createInfo.subresourceRange.layerCount = desc.subresourceRange.layerCount == 0
+ ? VK_REMAINING_ARRAY_LAYERS
+ : desc.subresourceRange.layerCount;
+ createInfo.subresourceRange.levelCount = desc.subresourceRange.mipLevelCount == 0
+ ? VK_REMAINING_MIP_LEVELS
+ : desc.subresourceRange.mipLevelCount;
switch (desc.type)
{
case IResourceView::Type::DepthStencil:
@@ -7236,8 +7285,24 @@ Result VKDevice::createBufferView(IBufferResource* buffer, IResourceView::Desc c
auto resourceImpl = (BufferResourceImpl*) buffer;
// TODO: These should come from the `ResourceView::Desc`
- VkDeviceSize offset = 0;
- VkDeviceSize size = resourceImpl->getDesc()->sizeInBytes;
+ auto stride = resourceImpl->getDesc()->elementSize;
+ if (stride == 0)
+ {
+ if (desc.format == Format::Unknown)
+ {
+ stride = 1;
+ }
+ else
+ {
+ FormatInfo info;
+ gfxGetFormatInfo(desc.format, &info);
+ stride = info.blockSizeInBytes;
+ assert(info.pixelsPerBlock == 1);
+ }
+ }
+ VkDeviceSize offset = (VkDeviceSize)desc.bufferRange.firstElement * stride;
+ VkDeviceSize size = desc.bufferRange.elementCount == 0 ? resourceImpl->getDesc()->sizeInBytes
+ : (VkDeviceSize)desc.bufferRange.elementCount * stride;
// There are two different cases we need to think about for buffers.
//
@@ -7274,7 +7339,7 @@ Result VKDevice::createBufferView(IBufferResource* buffer, IResourceView::Desc c
// require a view in Vulkan.
RefPtr<PlainBufferResourceViewImpl> viewImpl = new PlainBufferResourceViewImpl(this);
viewImpl->m_buffer = resourceImpl;
- viewImpl->offset = 0;
+ viewImpl->offset = offset;
viewImpl->size = size;
viewImpl->m_desc = desc;