From ad9abad220df96d2155f6825f158b7f6327b7ea8 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 10 Jan 2022 13:30:41 -0800 Subject: Various fixes to gfx. (#2074) * Various gfx fixes. * Fixup. Co-authored-by: Yong He --- tools/gfx/vulkan/render-vk.cpp | 44 +++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'tools/gfx/vulkan/render-vk.cpp') 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 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)); } -- cgit v1.2.3