diff options
| author | Yong He <yonghe@outlook.com> | 2021-11-17 13:20:13 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-17 13:20:13 -0800 |
| commit | efebfada38cd5252da62f7618c7f95e3ab180fbd (patch) | |
| tree | ca36ae2cb1e1046666103c678ab9a8e766b53efb /tools/gfx | |
| parent | 763d0b5acb584a4d2eca5e02922afed7d499141e (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.cpp | 11 | ||||
| -rw-r--r-- | tools/gfx/cuda/render-cuda.cpp | 11 | ||||
| -rw-r--r-- | tools/gfx/d3d11/render-d3d11.cpp | 10 | ||||
| -rw-r--r-- | tools/gfx/d3d12/render-d3d12.cpp | 64 | ||||
| -rw-r--r-- | tools/gfx/debug-layer.cpp | 25 | ||||
| -rw-r--r-- | tools/gfx/debug-layer.h | 6 | ||||
| -rw-r--r-- | tools/gfx/mutable-shader-object.h | 8 | ||||
| -rw-r--r-- | tools/gfx/open-gl/render-gl.cpp | 10 | ||||
| -rw-r--r-- | tools/gfx/renderer-shared.cpp | 9 | ||||
| -rw-r--r-- | tools/gfx/renderer-shared.h | 14 | ||||
| -rw-r--r-- | tools/gfx/vulkan/render-vk.cpp | 135 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-util.h | 26 |
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 |
