Updated to mozilla format

This commit is contained in:
Alejandro Saucedo 2020-07-31 06:46:01 +01:00
parent 4019e9c885
commit 443679f7d3
5 changed files with 531 additions and 381 deletions

View file

@ -9,7 +9,9 @@
#include "VulkanTools.h"
const std::string getAssetPath() {
const std::string
getAssetPath()
{
#if defined(VK_EXAMPLE_DATA_DIR)
return VK_EXAMPLE_DATA_DIR;
#else
@ -21,10 +23,12 @@ namespace vks {
namespace tools {
bool errorModeSilent = false;
std::string errorString(VkResult errorCode) {
std::string
errorString(VkResult errorCode)
{
switch (errorCode) {
#define STR(r) \
case VK_##r: \
#define STR(r) \
case VK_##r: \
return #r
STR(NOT_READY);
STR(TIMEOUT);
@ -55,10 +59,12 @@ std::string errorString(VkResult errorCode) {
}
}
std::string physicalDeviceTypeString(VkPhysicalDeviceType type) {
std::string
physicalDeviceTypeString(VkPhysicalDeviceType type)
{
switch (type) {
#define STR(r) \
case VK_PHYSICAL_DEVICE_TYPE_##r: \
#define STR(r) \
case VK_PHYSICAL_DEVICE_TYPE_##r: \
return #r
STR(OTHER);
STR(INTEGRATED_GPU);
@ -70,19 +76,21 @@ std::string physicalDeviceTypeString(VkPhysicalDeviceType type) {
}
}
VkBool32 getSupportedDepthFormat(VkPhysicalDevice physicalDevice,
VkFormat* depthFormat) {
VkBool32
getSupportedDepthFormat(VkPhysicalDevice physicalDevice, VkFormat* depthFormat)
{
// Since all depth formats may be optional, we need to find a suitable depth
// format to use Start with the highest precision packed format
std::vector<VkFormat> depthFormats = {
VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT,
VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT,
VK_FORMAT_D16_UNORM};
std::vector<VkFormat> depthFormats = { VK_FORMAT_D32_SFLOAT_S8_UINT,
VK_FORMAT_D32_SFLOAT,
VK_FORMAT_D24_UNORM_S8_UINT,
VK_FORMAT_D16_UNORM_S8_UINT,
VK_FORMAT_D16_UNORM };
for (auto& format : depthFormats) {
VkFormatProperties formatProps;
vkGetPhysicalDeviceFormatProperties(physicalDevice, format,
&formatProps);
vkGetPhysicalDeviceFormatProperties(
physicalDevice, format, &formatProps);
// Format must support depth stencil attachment for optimal tiling
if (formatProps.optimalTilingFeatures &
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) {
@ -95,9 +103,11 @@ VkBool32 getSupportedDepthFormat(VkPhysicalDevice physicalDevice,
}
// Returns if a given format support LINEAR filtering
VkBool32 formatIsFilterable(VkPhysicalDevice physicalDevice,
VkFormat format,
VkImageTiling tiling) {
VkBool32
formatIsFilterable(VkPhysicalDevice physicalDevice,
VkFormat format,
VkImageTiling tiling)
{
VkFormatProperties formatProps;
vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &formatProps);
@ -116,16 +126,18 @@ VkBool32 formatIsFilterable(VkPhysicalDevice physicalDevice,
// an image and put it into an active command buffer
// See chapter 11.4 "Image Layout" for details
void setImageLayout(VkCommandBuffer cmdbuffer,
VkImage image,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkImageSubresourceRange subresourceRange,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask) {
void
setImageLayout(VkCommandBuffer cmdbuffer,
VkImage image,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkImageSubresourceRange subresourceRange,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask)
{
// Create an image barrier object
VkImageMemoryBarrier imageMemoryBarrier =
vks::initializers::imageMemoryBarrier();
vks::initializers::imageMemoryBarrier();
imageMemoryBarrier.oldLayout = oldImageLayout;
imageMemoryBarrier.newLayout = newImageLayout;
imageMemoryBarrier.image = image;
@ -153,7 +165,7 @@ void setImageLayout(VkCommandBuffer cmdbuffer,
// Image is a color attachment
// Make sure any writes to the color buffer have been finished
imageMemoryBarrier.srcAccessMask =
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
break;
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
@ -161,7 +173,7 @@ void setImageLayout(VkCommandBuffer cmdbuffer,
// Make sure any writes to the depth/stencil buffer have been
// finished
imageMemoryBarrier.srcAccessMask =
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
break;
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
@ -205,15 +217,15 @@ void setImageLayout(VkCommandBuffer cmdbuffer,
// Image will be used as a color attachment
// Make sure any writes to the color buffer have been finished
imageMemoryBarrier.dstAccessMask =
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
break;
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
// Image layout will be used as a depth/stencil attachment
// Make sure any writes to depth/stencil buffer have been finished
imageMemoryBarrier.dstAccessMask =
imageMemoryBarrier.dstAccessMask |
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
imageMemoryBarrier.dstAccessMask |
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
break;
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
@ -221,7 +233,7 @@ void setImageLayout(VkCommandBuffer cmdbuffer,
// Make sure any writes to the image have been finished
if (imageMemoryBarrier.srcAccessMask == 0) {
imageMemoryBarrier.srcAccessMask =
VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
}
imageMemoryBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
break;
@ -231,38 +243,55 @@ void setImageLayout(VkCommandBuffer cmdbuffer,
}
// Put barrier inside setup command buffer
vkCmdPipelineBarrier(cmdbuffer, srcStageMask, dstStageMask, 0, 0, nullptr,
0, nullptr, 1, &imageMemoryBarrier);
vkCmdPipelineBarrier(cmdbuffer,
srcStageMask,
dstStageMask,
0,
0,
nullptr,
0,
nullptr,
1,
&imageMemoryBarrier);
}
// Fixed sub resource on first mip level and layer
void setImageLayout(VkCommandBuffer cmdbuffer,
VkImage image,
VkImageAspectFlags aspectMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask) {
void
setImageLayout(VkCommandBuffer cmdbuffer,
VkImage image,
VkImageAspectFlags aspectMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask)
{
VkImageSubresourceRange subresourceRange = {};
subresourceRange.aspectMask = aspectMask;
subresourceRange.baseMipLevel = 0;
subresourceRange.levelCount = 1;
subresourceRange.layerCount = 1;
setImageLayout(cmdbuffer, image, oldImageLayout, newImageLayout,
subresourceRange, srcStageMask, dstStageMask);
setImageLayout(cmdbuffer,
image,
oldImageLayout,
newImageLayout,
subresourceRange,
srcStageMask,
dstStageMask);
}
void insertImageMemoryBarrier(VkCommandBuffer cmdbuffer,
VkImage image,
VkAccessFlags srcAccessMask,
VkAccessFlags dstAccessMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
VkImageSubresourceRange subresourceRange) {
void
insertImageMemoryBarrier(VkCommandBuffer cmdbuffer,
VkImage image,
VkAccessFlags srcAccessMask,
VkAccessFlags dstAccessMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
VkImageSubresourceRange subresourceRange)
{
VkImageMemoryBarrier imageMemoryBarrier =
vks::initializers::imageMemoryBarrier();
vks::initializers::imageMemoryBarrier();
imageMemoryBarrier.srcAccessMask = srcAccessMask;
imageMemoryBarrier.dstAccessMask = dstAccessMask;
imageMemoryBarrier.oldLayout = oldImageLayout;
@ -270,11 +299,21 @@ void insertImageMemoryBarrier(VkCommandBuffer cmdbuffer,
imageMemoryBarrier.image = image;
imageMemoryBarrier.subresourceRange = subresourceRange;
vkCmdPipelineBarrier(cmdbuffer, srcStageMask, dstStageMask, 0, 0, nullptr,
0, nullptr, 1, &imageMemoryBarrier);
vkCmdPipelineBarrier(cmdbuffer,
srcStageMask,
dstStageMask,
0,
0,
nullptr,
0,
nullptr,
1,
&imageMemoryBarrier);
}
void exitFatal(std::string message, int32_t exitCode) {
void
exitFatal(std::string message, int32_t exitCode)
{
#if defined(_WIN32)
if (!errorModeSilent) {
MessageBox(NULL, message.c_str(), NULL, MB_OK | MB_ICONERROR);
@ -283,11 +322,15 @@ void exitFatal(std::string message, int32_t exitCode) {
std::cerr << message << "\n";
}
void exitFatal(std::string message, VkResult resultCode) {
void
exitFatal(std::string message, VkResult resultCode)
{
exitFatal(message, (int32_t)resultCode);
}
VkShaderModule loadShader(const char* fileName, VkDevice device) {
VkShaderModule
loadShader(const char* fileName, VkDevice device)
{
std::ifstream is(fileName, std::ios::binary | std::ios::in | std::ios::ate);
if (is.is_open()) {
@ -305,8 +348,8 @@ VkShaderModule loadShader(const char* fileName, VkDevice device) {
moduleCreateInfo.codeSize = size;
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL,
&shaderModule));
VK_CHECK_RESULT(vkCreateShaderModule(
device, &moduleCreateInfo, NULL, &shaderModule));
delete[] shaderCode;
@ -318,9 +361,11 @@ VkShaderModule loadShader(const char* fileName, VkDevice device) {
}
}
bool fileExists(const std::string& filename) {
bool
fileExists(const std::string& filename)
{
std::ifstream f(filename.c_str());
return !f.fail();
}
} // namespace tools
} // namespace vks
} // namespace tools
} // namespace vks