graphics device fixes (#142)
* graphics device fixes * fix usage of vkAcquireNextImageKHR
This commit is contained in:
@@ -51,7 +51,7 @@ namespace wiGraphics
|
||||
virtual void WriteTopLevelAccelerationStructureInstance(const RaytracingAccelerationStructureDesc::TopLevel::Instance* instance, void* dest) {}
|
||||
virtual void WriteShaderIdentifier(const RaytracingPipelineState* rtpso, uint32_t group_index, void* dest) {}
|
||||
|
||||
virtual void Map(const GPUResource* resource, Mapping* mapping = nullptr) = 0;
|
||||
virtual void Map(const GPUResource* resource, Mapping* mapping) = 0;
|
||||
virtual void Unmap(const GPUResource* resource) = 0;
|
||||
|
||||
virtual void SetName(GPUResource* pResource, const char* name) = 0;
|
||||
|
||||
@@ -2375,24 +2375,21 @@ void GraphicsDevice_DX11::Map(const GPUResource* resource, Mapping* mapping)
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE map_result = {};
|
||||
D3D11_MAP map_type = D3D11_MAP_READ_WRITE;
|
||||
if (mapping != nullptr)
|
||||
if (mapping->_flags & Mapping::FLAG_READ)
|
||||
{
|
||||
if (mapping->_flags & Mapping::FLAG_READ)
|
||||
if (mapping->_flags & Mapping::FLAG_WRITE)
|
||||
{
|
||||
if (mapping->_flags & Mapping::FLAG_WRITE)
|
||||
{
|
||||
map_type = D3D11_MAP_READ_WRITE;
|
||||
}
|
||||
else
|
||||
{
|
||||
map_type = D3D11_MAP_READ;
|
||||
}
|
||||
map_type = D3D11_MAP_READ_WRITE;
|
||||
}
|
||||
else if (mapping->_flags & Mapping::FLAG_WRITE)
|
||||
else
|
||||
{
|
||||
map_type = D3D11_MAP_WRITE_NO_OVERWRITE;
|
||||
map_type = D3D11_MAP_READ;
|
||||
}
|
||||
}
|
||||
else if (mapping->_flags & Mapping::FLAG_WRITE)
|
||||
{
|
||||
map_type = D3D11_MAP_WRITE_NO_OVERWRITE;
|
||||
}
|
||||
HRESULT hr = immediateContext->Map(internal_state->resource.Get(), 0, map_type, D3D11_MAP_FLAG_DO_NOT_WAIT, &map_result);
|
||||
mapping->data = map_result.pData;
|
||||
mapping->rowpitch = map_result.RowPitch;
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace wiGraphics
|
||||
|
||||
int CreateSubresource(Texture* texture, SUBRESOURCE_TYPE type, uint32_t firstSlice, uint32_t sliceCount, uint32_t firstMip, uint32_t mipCount) override;
|
||||
|
||||
void Map(const GPUResource* resource, Mapping* mapping = nullptr) override;
|
||||
void Map(const GPUResource* resource, Mapping* mapping) override;
|
||||
void Unmap(const GPUResource* resource) override;
|
||||
|
||||
void SetName(GPUResource* pResource, const char* name) override;
|
||||
|
||||
@@ -3644,13 +3644,13 @@ using namespace DX12_Internal;
|
||||
void GraphicsDevice_DX12::Map(const GPUResource* resource, Mapping* mapping)
|
||||
{
|
||||
auto internal_state = to_internal(resource);
|
||||
D3D12_RANGE read_range;
|
||||
if (mapping != nullptr && mapping->_flags & Mapping::FLAG_READ)
|
||||
D3D12_RANGE read_range = {};
|
||||
if (mapping->_flags & Mapping::FLAG_READ)
|
||||
{
|
||||
read_range.Begin = mapping->offset;
|
||||
read_range.End = mapping->size;
|
||||
}
|
||||
HRESULT hr = internal_state->resource->Map(0, mapping == nullptr ? nullptr : &read_range, &mapping->data);
|
||||
HRESULT hr = internal_state->resource->Map(0, &read_range, &mapping->data);
|
||||
|
||||
mapping->rowpitch = internal_state->footprint.Footprint.RowPitch;
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ namespace wiGraphics
|
||||
void WriteTopLevelAccelerationStructureInstance(const RaytracingAccelerationStructureDesc::TopLevel::Instance* instance, void* dest) override;
|
||||
void WriteShaderIdentifier(const RaytracingPipelineState* rtpso, uint32_t group_index, void* dest) override;
|
||||
|
||||
void Map(const GPUResource* resource, Mapping* mapping = nullptr) override;
|
||||
void Map(const GPUResource* resource, Mapping* mapping) override;
|
||||
void Unmap(const GPUResource* resource) override;
|
||||
|
||||
void SetName(GPUResource* pResource, const char* name) override;
|
||||
|
||||
@@ -2530,13 +2530,12 @@ using namespace Vulkan_Internal;
|
||||
}
|
||||
GraphicsDevice_Vulkan::~GraphicsDevice_Vulkan()
|
||||
{
|
||||
WaitForGPU();
|
||||
vkQueueWaitIdle(graphicsQueue);
|
||||
vkQueueWaitIdle(presentQueue);
|
||||
|
||||
for (auto& frame : frames)
|
||||
{
|
||||
vkDestroyFence(device, frame.frameFence, nullptr);
|
||||
vkDestroyFramebuffer(device, frame.swapChainFramebuffer, nullptr);
|
||||
vkDestroyImageView(device, frame.swapChainImageView, nullptr);
|
||||
for (auto& commandPool : frame.commandPools)
|
||||
{
|
||||
vkDestroyCommandPool(device, commandPool, nullptr);
|
||||
@@ -2566,10 +2565,6 @@ using namespace Vulkan_Internal;
|
||||
vkDestroyPipeline(device, x.second, nullptr);
|
||||
}
|
||||
|
||||
vkDestroyRenderPass(device, defaultRenderPass, nullptr);
|
||||
|
||||
vkDestroySwapchainKHR(device, swapChain, nullptr);
|
||||
|
||||
vkDestroyQueryPool(device, querypool_timestamp, nullptr);
|
||||
vkDestroyQueryPool(device, querypool_occlusion, nullptr);
|
||||
|
||||
@@ -2587,6 +2582,15 @@ using namespace Vulkan_Internal;
|
||||
vkDestroyImageView(device, nullImageView3D, nullptr);
|
||||
vkDestroySampler(device, nullSampler, nullptr);
|
||||
|
||||
vkDestroyRenderPass(device, defaultRenderPass, nullptr);
|
||||
for (size_t i = 0; i < swapChainImages.size(); ++i)
|
||||
{
|
||||
vkDestroyFramebuffer(device, swapChainFramebuffers[i], nullptr);
|
||||
vkDestroyImageView(device, swapChainImageViews[i], nullptr);
|
||||
//vkDestroyImage(device, swapChainImages[i], nullptr);
|
||||
}
|
||||
vkDestroySwapchainKHR(device, swapChain, nullptr);
|
||||
|
||||
DestroyDebugReportCallbackEXT(instance, callback, nullptr);
|
||||
vkDestroySurfaceKHR(instance, surface, nullptr);
|
||||
}
|
||||
@@ -2653,7 +2657,7 @@ using namespace Vulkan_Internal;
|
||||
assert(res == VK_SUCCESS);
|
||||
|
||||
vkGetSwapchainImagesKHR(device, swapChain, &imageCount, nullptr);
|
||||
assert(imageCount == BACKBUFFER_COUNT);
|
||||
assert(BACKBUFFER_COUNT <= imageCount);
|
||||
swapChainImages.resize(imageCount);
|
||||
vkGetSwapchainImagesKHR(device, swapChain, &imageCount, swapChainImages.data());
|
||||
swapChainImageFormat = surfaceFormat.format;
|
||||
@@ -2670,7 +2674,6 @@ using namespace Vulkan_Internal;
|
||||
assert(res == VK_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
// Create default render pass:
|
||||
{
|
||||
VkAttachmentDescription colorAttachment = {};
|
||||
@@ -2719,54 +2722,52 @@ using namespace Vulkan_Internal;
|
||||
|
||||
}
|
||||
|
||||
for (uint32_t fr = 0; fr < BACKBUFFER_COUNT; ++fr)
|
||||
// Create swap chain render targets:
|
||||
swapChainImageViews.resize(swapChainImages.size());
|
||||
swapChainFramebuffers.resize(swapChainImages.size());
|
||||
for (size_t i = 0; i < swapChainImages.size(); ++i)
|
||||
{
|
||||
VkImageViewCreateInfo createInfo = {};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
createInfo.image = swapChainImages[i];
|
||||
createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
createInfo.format = swapChainImageFormat;
|
||||
createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
createInfo.subresourceRange.baseMipLevel = 0;
|
||||
createInfo.subresourceRange.levelCount = 1;
|
||||
createInfo.subresourceRange.baseArrayLayer = 0;
|
||||
createInfo.subresourceRange.layerCount = 1;
|
||||
|
||||
// Create swap chain render targets:
|
||||
if (swapChainImageViews[i] != VK_NULL_HANDLE)
|
||||
{
|
||||
VkImageViewCreateInfo createInfo = {};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
createInfo.image = swapChainImages[fr];
|
||||
createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
createInfo.format = swapChainImageFormat;
|
||||
createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
createInfo.subresourceRange.baseMipLevel = 0;
|
||||
createInfo.subresourceRange.levelCount = 1;
|
||||
createInfo.subresourceRange.baseArrayLayer = 0;
|
||||
createInfo.subresourceRange.layerCount = 1;
|
||||
|
||||
if (frames[fr].swapChainImageView != VK_NULL_HANDLE)
|
||||
{
|
||||
vkDestroyImageView(device, frames[fr].swapChainImageView, nullptr);
|
||||
}
|
||||
res = vkCreateImageView(device, &createInfo, nullptr, &frames[fr].swapChainImageView);
|
||||
assert(res == VK_SUCCESS);
|
||||
|
||||
VkImageView attachments[] = {
|
||||
frames[fr].swapChainImageView
|
||||
};
|
||||
|
||||
VkFramebufferCreateInfo framebufferInfo = {};
|
||||
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
framebufferInfo.renderPass = defaultRenderPass;
|
||||
framebufferInfo.attachmentCount = 1;
|
||||
framebufferInfo.pAttachments = attachments;
|
||||
framebufferInfo.width = swapChainExtent.width;
|
||||
framebufferInfo.height = swapChainExtent.height;
|
||||
framebufferInfo.layers = 1;
|
||||
|
||||
if (frames[fr].swapChainFramebuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
vkDestroyFramebuffer(device, frames[fr].swapChainFramebuffer, nullptr);
|
||||
}
|
||||
res = vkCreateFramebuffer(device, &framebufferInfo, nullptr, &frames[fr].swapChainFramebuffer);
|
||||
assert(res == VK_SUCCESS);
|
||||
vkDestroyImageView(device, swapChainImageViews[i], nullptr);
|
||||
}
|
||||
res = vkCreateImageView(device, &createInfo, nullptr, &swapChainImageViews[i]);
|
||||
assert(res == VK_SUCCESS);
|
||||
|
||||
VkImageView attachments[] = {
|
||||
swapChainImageViews[i]
|
||||
};
|
||||
|
||||
VkFramebufferCreateInfo framebufferInfo = {};
|
||||
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
framebufferInfo.renderPass = defaultRenderPass;
|
||||
framebufferInfo.attachmentCount = 1;
|
||||
framebufferInfo.pAttachments = attachments;
|
||||
framebufferInfo.width = swapChainExtent.width;
|
||||
framebufferInfo.height = swapChainExtent.height;
|
||||
framebufferInfo.layers = 1;
|
||||
|
||||
if (swapChainFramebuffers[i] != VK_NULL_HANDLE)
|
||||
{
|
||||
vkDestroyFramebuffer(device, swapChainFramebuffers[i], nullptr);
|
||||
}
|
||||
res = vkCreateFramebuffer(device, &framebufferInfo, nullptr, &swapChainFramebuffers[i]);
|
||||
assert(res == VK_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4705,10 +4706,12 @@ using namespace Vulkan_Internal;
|
||||
{
|
||||
VkClearValue clearColor = { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||
|
||||
vkAcquireNextImageKHR(device, swapChain, 0xFFFFFFFFFFFFFFFF, imageAvailableSemaphore, VK_NULL_HANDLE, &swapChainImageIndex);
|
||||
|
||||
VkRenderPassBeginInfo renderPassInfo = {};
|
||||
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
renderPassInfo.renderPass = defaultRenderPass;
|
||||
renderPassInfo.framebuffer = GetFrameResources().swapChainFramebuffer;
|
||||
renderPassInfo.framebuffer = swapChainFramebuffers[swapChainImageIndex];
|
||||
renderPassInfo.renderArea.offset = { 0, 0 };
|
||||
renderPassInfo.renderArea.extent = swapChainExtent;
|
||||
renderPassInfo.clearValueCount = 1;
|
||||
@@ -4720,8 +4723,6 @@ using namespace Vulkan_Internal;
|
||||
{
|
||||
vkCmdEndRenderPass(GetDirectCommandList(cmd));
|
||||
|
||||
vkAcquireNextImageKHR(device, swapChain, 0xFFFFFFFFFFFFFFFF, imageAvailableSemaphore, VK_NULL_HANDLE, &swapChainImageIndex);
|
||||
|
||||
SubmitCommandLists();
|
||||
|
||||
VkPresentInfoKHR presentInfo = {};
|
||||
|
||||
@@ -75,6 +75,8 @@ namespace wiGraphics
|
||||
VkExtent2D swapChainExtent;
|
||||
uint32_t swapChainImageIndex = 0;
|
||||
std::vector<VkImage> swapChainImages;
|
||||
std::vector<VkImageView> swapChainImageViews;
|
||||
std::vector<VkFramebuffer> swapChainFramebuffers;
|
||||
|
||||
VkRenderPass defaultRenderPass = VK_NULL_HANDLE;
|
||||
|
||||
@@ -116,8 +118,6 @@ namespace wiGraphics
|
||||
VkFence frameFence = VK_NULL_HANDLE;
|
||||
VkCommandPool commandPools[COMMANDLIST_COUNT] = {};
|
||||
VkCommandBuffer commandBuffers[COMMANDLIST_COUNT] = {};
|
||||
VkImageView swapChainImageView = VK_NULL_HANDLE;
|
||||
VkFramebuffer swapChainFramebuffer = VK_NULL_HANDLE;
|
||||
|
||||
VkQueue copyQueue = VK_NULL_HANDLE;
|
||||
VkCommandPool copyCommandPool = VK_NULL_HANDLE;
|
||||
@@ -244,7 +244,7 @@ namespace wiGraphics
|
||||
void WriteTopLevelAccelerationStructureInstance(const RaytracingAccelerationStructureDesc::TopLevel::Instance* instance, void* dest) override;
|
||||
void WriteShaderIdentifier(const RaytracingPipelineState* rtpso, uint32_t group_index, void* dest) override;
|
||||
|
||||
void Map(const GPUResource* resource, Mapping* mapping = nullptr) override;
|
||||
void Map(const GPUResource* resource, Mapping* mapping) override;
|
||||
void Unmap(const GPUResource* resource) override;
|
||||
|
||||
void SetName(GPUResource* pResource, const char* name) override;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "wiVersion.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
namespace wiVersion
|
||||
{
|
||||
@@ -9,7 +9,7 @@ namespace wiVersion
|
||||
// minor features, major updates, breaking API changes
|
||||
const int minor = 47;
|
||||
// minor bug fixes, alterations, refactors, updates
|
||||
const int revision = 0;
|
||||
const int revision = 1;
|
||||
|
||||
const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace wiVersion
|
||||
{
|
||||
return revision;
|
||||
}
|
||||
const std::string& GetVersionString()
|
||||
const char* GetVersionString()
|
||||
{
|
||||
return version_string;
|
||||
return version_string.c_str();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
#ifndef WICKEDENGINE_VERSION_DEFINED
|
||||
#define WICKEDENGINE_VERSION_DEFINED
|
||||
|
||||
#include "CommonInclude.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace wiVersion
|
||||
{
|
||||
long GetVersion();
|
||||
@@ -14,7 +11,7 @@ namespace wiVersion
|
||||
int GetMinor();
|
||||
// minor bug fixes, alterations
|
||||
int GetRevision();
|
||||
const std::string& GetVersionString();
|
||||
const char* GetVersionString();
|
||||
}
|
||||
|
||||
#endif // WICKEDENGINE_VERSION_DEFINED
|
||||
|
||||
Reference in New Issue
Block a user