summaryrefslogtreecommitdiff
path: root/tools/gfx/vulkan/render-vk.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-01-10 13:30:41 -0800
committerGitHub <noreply@github.com>2022-01-10 13:30:41 -0800
commitad9abad220df96d2155f6825f158b7f6327b7ea8 (patch)
tree12b146961910c1b4aa6a68b3063ec3e68d2ce23d /tools/gfx/vulkan/render-vk.cpp
parent0ac19741937e007ebb45791f53d413d21055feda (diff)
Various fixes to gfx. (#2074)
* Various gfx fixes. * Fixup. 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.cpp44
1 files changed, 31 insertions, 13 deletions
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp
index 6534e9340..0952e7ea5 100644
--- a/tools/gfx/vulkan/render-vk.cpp
+++ b/tools/gfx/vulkan/render-vk.cpp
@@ -285,6 +285,24 @@ public:
outHandle->api = InteropHandleAPI::Vulkan;
return SLANG_OK;
}
+
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ map(MemoryRange* rangeToRead, void** outPointer) override
+ {
+ SLANG_UNUSED(rangeToRead);
+ auto api = m_buffer.m_api;
+ SLANG_VK_RETURN_ON_FAIL(api->vkMapMemory(
+ api->m_device, m_buffer.m_memory, 0, VK_WHOLE_SIZE, 0, outPointer));
+ return SLANG_OK;
+ }
+
+ virtual SLANG_NO_THROW Result SLANG_MCALL unmap(MemoryRange* writtenRange) override
+ {
+ SLANG_UNUSED(writtenRange);
+ auto api = m_buffer.m_api;
+ api->vkUnmapMemory(api->m_device, m_buffer.m_memory);
+ return SLANG_OK;
+ }
};
class FenceImpl : public FenceBase
@@ -4796,13 +4814,13 @@ public:
public:
void init(CommandBufferImpl* commandBuffer) { m_commandBuffer = commandBuffer; }
- inline VkAccessFlags translateAccelerationStructureAccessFlag(MemoryType::Enum access)
+ inline VkAccessFlags translateAccelerationStructureAccessFlag(AccessFlag access)
{
VkAccessFlags result = 0;
- if (access & MemoryType::CpuRead)
+ if ((uint32_t)access & (uint32_t)AccessFlag::Read)
result |= VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR |
VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT;
- if (access & MemoryType::CpuWrite)
+ if ((uint32_t)access & (uint32_t)AccessFlag::Write)
result |= VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR;
return result;
}
@@ -4810,8 +4828,8 @@ public:
inline void _memoryBarrier(
int count,
IAccelerationStructure* const* structures,
- MemoryType::Enum srcAccess,
- MemoryType::Enum destAccess)
+ AccessFlag srcAccess,
+ AccessFlag destAccess)
{
ShortList<VkBufferMemoryBarrier> memBarriers;
memBarriers.setCount(count);
@@ -4938,7 +4956,7 @@ public:
if (propertyQueryCount)
{
- _memoryBarrier(1, &desc.dest, MemoryType::CpuWrite, MemoryType::CpuRead);
+ _memoryBarrier(1, &desc.dest, AccessFlag::Write, AccessFlag::Read);
_queryAccelerationStructureProperties(
1, &desc.dest, propertyQueryCount, queryDescs);
}
@@ -5011,8 +5029,8 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL memoryBarrier(
int count,
IAccelerationStructure* const* structures,
- MemoryType::Enum srcAccess,
- MemoryType::Enum destAccess) override
+ AccessFlag srcAccess,
+ AccessFlag destAccess) override
{
_memoryBarrier(count, structures, srcAccess, destAccess);
}
@@ -7020,12 +7038,12 @@ static VkImageUsageFlagBits _calcImageUsageFlags(ResourceStateSet states)
static VkImageUsageFlags _calcImageUsageFlags(
ResourceStateSet states,
- int cpuAccessFlags,
+ MemoryType memoryType,
const void* initData)
{
VkImageUsageFlags usage = _calcImageUsageFlags(states);
- if ((cpuAccessFlags & MemoryType::CpuWrite) || initData)
+ if (memoryType == MemoryType::Upload || initData)
{
usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
}
@@ -7223,7 +7241,7 @@ Result VKDevice::getTextureAllocationInfo(
imageInfo.format = format;
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
- imageInfo.usage = _calcImageUsageFlags(desc.allowedStates, desc.cpuAccessFlags, nullptr);
+ imageInfo.usage = _calcImageUsageFlags(desc.allowedStates, desc.memoryType, nullptr);
imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
@@ -7302,7 +7320,7 @@ Result VKDevice::createTextureResource(const ITextureResource::Desc& descIn, con
imageInfo.format = format;
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
- imageInfo.usage = _calcImageUsageFlags(desc.allowedStates, desc.cpuAccessFlags, initData);
+ imageInfo.usage = _calcImageUsageFlags(desc.allowedStates, desc.memoryType, initData);
imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
@@ -7542,7 +7560,7 @@ Result VKDevice::createBufferResource(const IBufferResource::Desc& descIn, const
SLANG_RETURN_ON_FAIL(buffer->m_buffer.init(m_api, desc.sizeInBytes, usage, reqMemoryProperties));
}
- if ((desc.cpuAccessFlags & MemoryType::CpuWrite) || initData)
+ if (desc.memoryType == MemoryType::Upload || initData)
{
SLANG_RETURN_ON_FAIL(buffer->m_uploadBuffer.init(m_api, bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT));
}