Add Vulkan triangle integration path
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
#include "XCEngine/RHI/Vulkan/VulkanResourceView.h"
|
||||
|
||||
#include "XCEngine/RHI/Vulkan/VulkanBuffer.h"
|
||||
#include "XCEngine/RHI/Vulkan/VulkanTexture.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
@@ -32,6 +35,61 @@ bool VulkanResourceView::InitializeAsRenderTarget(VkDevice device, VulkanTexture
|
||||
return vkCreateImageView(device, &viewInfo, nullptr, &m_imageView) == VK_SUCCESS;
|
||||
}
|
||||
|
||||
bool VulkanResourceView::InitializeAsVertexBuffer(VulkanBuffer* buffer, const ResourceViewDesc& desc) {
|
||||
if (buffer == nullptr || buffer->GetBuffer() == VK_NULL_HANDLE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_viewType = ResourceViewType::VertexBuffer;
|
||||
m_dimension = ResourceViewDimension::Buffer;
|
||||
m_format = Format::Unknown;
|
||||
m_buffer = buffer;
|
||||
m_bufferOffset = desc.bufferLocation;
|
||||
m_bufferSize = static_cast<uint32_t>(buffer->GetSize());
|
||||
m_bufferStride = desc.structureByteStride > 0 ? desc.structureByteStride : buffer->GetStride();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool VulkanResourceView::InitializeAsIndexBuffer(VulkanBuffer* buffer, const ResourceViewDesc& desc) {
|
||||
if (buffer == nullptr || buffer->GetBuffer() == VK_NULL_HANDLE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_viewType = ResourceViewType::IndexBuffer;
|
||||
m_dimension = ResourceViewDimension::Buffer;
|
||||
m_format = desc.format != 0 ? static_cast<Format>(desc.format) : Format::R32_UInt;
|
||||
m_buffer = buffer;
|
||||
m_bufferOffset = desc.bufferLocation;
|
||||
m_bufferSize = static_cast<uint32_t>(buffer->GetSize());
|
||||
m_bufferStride = buffer->GetStride();
|
||||
return true;
|
||||
}
|
||||
|
||||
void* VulkanResourceView::GetNativeHandle() {
|
||||
if (m_imageView != VK_NULL_HANDLE) {
|
||||
return m_imageView;
|
||||
}
|
||||
|
||||
return m_buffer != nullptr ? m_buffer->GetNativeHandle() : nullptr;
|
||||
}
|
||||
|
||||
bool VulkanResourceView::IsValid() const {
|
||||
switch (m_viewType) {
|
||||
case ResourceViewType::VertexBuffer:
|
||||
case ResourceViewType::IndexBuffer:
|
||||
return m_buffer != nullptr && m_buffer->GetBuffer() != VK_NULL_HANDLE;
|
||||
case ResourceViewType::RenderTarget:
|
||||
case ResourceViewType::DepthStencil:
|
||||
return m_imageView != VK_NULL_HANDLE;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
VkBuffer VulkanResourceView::GetBuffer() const {
|
||||
return m_buffer != nullptr ? m_buffer->GetBuffer() : VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
void VulkanResourceView::Shutdown() {
|
||||
if (m_imageView != VK_NULL_HANDLE && m_device != VK_NULL_HANDLE) {
|
||||
vkDestroyImageView(m_device, m_imageView, nullptr);
|
||||
@@ -39,8 +97,12 @@ void VulkanResourceView::Shutdown() {
|
||||
m_imageView = VK_NULL_HANDLE;
|
||||
m_device = VK_NULL_HANDLE;
|
||||
m_texture = nullptr;
|
||||
m_buffer = nullptr;
|
||||
m_format = Format::Unknown;
|
||||
m_dimension = ResourceViewDimension::Unknown;
|
||||
m_bufferOffset = 0;
|
||||
m_bufferSize = 0;
|
||||
m_bufferStride = 0;
|
||||
}
|
||||
|
||||
} // namespace RHI
|
||||
|
||||
Reference in New Issue
Block a user