Browse Source
- Add part of vulkan 1.3 tutorial code - Clean the HelloTrinagle code - Duplicate HelloTriangle and continue for compute on the new filesmaster
AliMehrabani
2 weeks ago
42 changed files with 22358 additions and 1467 deletions
File diff suppressed because it is too large
@ -1,229 +0,0 @@ |
|||||
#ifndef HELLOTRIANGLEAPPLICATION_H |
|
||||
#define HELLOTRIANGLEAPPLICATION_H |
|
||||
|
|
||||
#ifdef NDEBUG |
|
||||
const bool enableValidationLayers = false; |
|
||||
#else |
|
||||
const bool enableValidationLayers = true; |
|
||||
#endif |
|
||||
|
|
||||
#include <vulkan/vulkan.h> |
|
||||
|
|
||||
//#define VK_USE_PLATFORM_
|
|
||||
//#define GLFW_INCLUDE_VULKAN
|
|
||||
//#include <GLFW/glfw3.h>
|
|
||||
//#define GLFW_EXPOSE_NATIVE_
|
|
||||
//#include <GLFW/glfw3native.h>
|
|
||||
|
|
||||
#define GLM_FORCE_RADIANS |
|
||||
#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES |
|
||||
#include <glm/glm.hpp> |
|
||||
#include <glm/gtc/matrix_transform.hpp> |
|
||||
|
|
||||
#include <chrono> |
|
||||
|
|
||||
#include <QObject> |
|
||||
#include <QtQuick/QQuickWindow> |
|
||||
#include <iostream> |
|
||||
#include <optional> |
|
||||
#include <cstdint> // Necessary for uint32_t |
|
||||
#include <limits> // Necessary for std::numeric_limits |
|
||||
#include <algorithm> // Necessary for std::clamp |
|
||||
#include <fstream> |
|
||||
#include <array> |
|
||||
|
|
||||
#ifdef Q_OS_ANDROID |
|
||||
const QString TARGET_PLATFORM = "Android"; |
|
||||
#else |
|
||||
const QString TARGET_PLATFORM = "Linux"; |
|
||||
#endif |
|
||||
|
|
||||
const int MAX_FRAMES_IN_FLIGHT = 2; |
|
||||
|
|
||||
struct QueueFamilyIndices { |
|
||||
std::optional<uint32_t> graphicsFamily; |
|
||||
std::optional<uint32_t> presentFamily; |
|
||||
|
|
||||
bool isComplete() { |
|
||||
return graphicsFamily.has_value() && presentFamily.has_value(); |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
struct SwapChainSupportDetails { |
|
||||
VkSurfaceCapabilitiesKHR capabilities; |
|
||||
std::vector<VkSurfaceFormatKHR> formats; |
|
||||
std::vector<VkPresentModeKHR> presentModes; |
|
||||
}; |
|
||||
|
|
||||
struct Vertex { |
|
||||
alignas(16) glm::vec2 pos; |
|
||||
alignas(16) glm::vec3 color; |
|
||||
|
|
||||
static VkVertexInputBindingDescription getBindingDescription() { |
|
||||
VkVertexInputBindingDescription bindingDescription{}; |
|
||||
bindingDescription.binding = 0; |
|
||||
bindingDescription.stride = sizeof(Vertex); |
|
||||
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; |
|
||||
|
|
||||
return bindingDescription; |
|
||||
} |
|
||||
|
|
||||
static std::array<VkVertexInputAttributeDescription, 2> getAttributeDescriptions() { |
|
||||
std::array<VkVertexInputAttributeDescription, 2> attributeDescriptions{}; |
|
||||
|
|
||||
attributeDescriptions[0].binding = 0; |
|
||||
attributeDescriptions[0].location = 0; |
|
||||
attributeDescriptions[0].format = VK_FORMAT_R32G32_SFLOAT; |
|
||||
attributeDescriptions[0].offset = offsetof(Vertex, pos); |
|
||||
|
|
||||
attributeDescriptions[1].binding = 0; |
|
||||
attributeDescriptions[1].location = 1; |
|
||||
attributeDescriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT; |
|
||||
attributeDescriptions[1].offset = offsetof(Vertex, color); |
|
||||
|
|
||||
return attributeDescriptions; |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
struct UniformBufferObject { |
|
||||
alignas(16) glm::mat4 model; |
|
||||
alignas(16) glm::mat4 view; |
|
||||
alignas(16) glm::mat4 proj; |
|
||||
}; |
|
||||
|
|
||||
class HelloTriangleApplication |
|
||||
{ |
|
||||
public: |
|
||||
HelloTriangleApplication(); |
|
||||
void run(); |
|
||||
|
|
||||
// Message Callback
|
|
||||
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT /*messageSeverity*/, |
|
||||
VkDebugUtilsMessageTypeFlagsEXT /*messageType*/,const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,void* /*pUserData*/) { |
|
||||
|
|
||||
std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl; |
|
||||
|
|
||||
return VK_FALSE; |
|
||||
} |
|
||||
static std::vector<char> readFile(const std::string& filename); |
|
||||
|
|
||||
// static void framebufferResizeCallback(GLFWwindow* window, int width, int height);
|
|
||||
static void framebufferResizeCallback(QQuickWindow* window, int width, int height); |
|
||||
|
|
||||
private: |
|
||||
void initWindow(); |
|
||||
void initVulkan(); |
|
||||
void mainLoop(); |
|
||||
void cleanup(); |
|
||||
void createInstance(); |
|
||||
|
|
||||
// Enable Validation Layers
|
|
||||
bool checkValidationLayerSupport(); |
|
||||
|
|
||||
// Message Callback
|
|
||||
std::vector<const char*> getRequiredExtensions(); |
|
||||
void setupDebugMessenger(); |
|
||||
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo); |
|
||||
|
|
||||
void pickPhysicalDevice(); |
|
||||
bool isDeviceSuitable(VkPhysicalDevice device); |
|
||||
|
|
||||
void createLogicalDevice(); |
|
||||
QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device); |
|
||||
|
|
||||
void createSurface(); |
|
||||
|
|
||||
bool checkDeviceExtensionSupport(VkPhysicalDevice device); |
|
||||
SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); |
|
||||
VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats); |
|
||||
VkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes); |
|
||||
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities); |
|
||||
void createSwapChain(); |
|
||||
|
|
||||
void createImageViews(); |
|
||||
|
|
||||
void createGraphicsPipeline(); |
|
||||
VkShaderModule createShaderModule(const std::vector<char>& code); |
|
||||
void createRenderPass(); |
|
||||
|
|
||||
void createFramebuffers(); |
|
||||
void createCommandPool(); |
|
||||
void createCommandBuffer(); |
|
||||
void recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex); |
|
||||
|
|
||||
void drawFrame(); |
|
||||
void createSyncObjects(); |
|
||||
|
|
||||
void recreateSwapChain(); |
|
||||
void cleanupSwapChain(); |
|
||||
|
|
||||
void createVertexBuffer(); |
|
||||
uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties); |
|
||||
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory); |
|
||||
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); |
|
||||
void createIndexBuffer(); |
|
||||
|
|
||||
void createDescriptorSetLayout(); |
|
||||
void createUniformBuffers(); |
|
||||
void updateUniformBuffer(uint32_t currentImage); |
|
||||
void createDescriptorPool(); |
|
||||
void createDescriptorSets(); |
|
||||
|
|
||||
const int32_t WIDTH = 800; |
|
||||
const int32_t HEIGHT = 600; |
|
||||
const std::vector<const char*> validationLayers = { |
|
||||
"VK_LAYER_KHRONOS_validation" |
|
||||
}; |
|
||||
const std::vector<const char*> deviceExtensions = { |
|
||||
VK_KHR_SWAPCHAIN_EXTENSION_NAME |
|
||||
}; |
|
||||
const std::vector<Vertex> vertices = { |
|
||||
{{-0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}}, |
|
||||
{{0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}}, |
|
||||
{{0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}, |
|
||||
{{-0.5f, 0.5f}, {1.0f, 1.0f, 1.0f}} |
|
||||
}; |
|
||||
const std::vector<uint16_t> indices = { |
|
||||
0, 1, 2, 2, 3, 0 |
|
||||
}; |
|
||||
|
|
||||
uint32_t currentFrame = 0; |
|
||||
bool framebufferResized = false; |
|
||||
|
|
||||
// GLFWwindow *_window;
|
|
||||
QQuickWindow* _window; |
|
||||
VkInstance _instance; |
|
||||
VkDebugUtilsMessengerEXT _debugMessenger; |
|
||||
VkPhysicalDevice _physicalDevice; |
|
||||
VkDevice _device; |
|
||||
VkQueue _graphicsQueue; |
|
||||
VkSurfaceKHR _surface; |
|
||||
VkQueue _presentQueue; |
|
||||
VkSwapchainKHR _swapChain; |
|
||||
std::vector<VkImage> _swapChainImages; |
|
||||
VkFormat _swapChainImageFormat; |
|
||||
VkExtent2D _swapChainExtent; |
|
||||
std::vector<VkImageView> _swapChainImageViews; |
|
||||
VkRenderPass _renderPass; |
|
||||
VkDescriptorSetLayout _descriptorSetLayout; |
|
||||
VkPipelineLayout _pipelineLayout; |
|
||||
VkPipeline _graphicsPipeline; |
|
||||
std::vector<VkFramebuffer> _swapChainFramebuffers; |
|
||||
VkCommandPool _commandPool; |
|
||||
std::vector<VkCommandBuffer> _commandBuffers; |
|
||||
std::vector<VkSemaphore> _imageAvailableSemaphores; |
|
||||
std::vector<VkSemaphore> _renderFinishedSemaphores; |
|
||||
std::vector<VkFence> _inFlightFences; |
|
||||
VkBuffer _vertexBuffer; |
|
||||
VkDeviceMemory _vertexBufferMemory; |
|
||||
VkBuffer _indexBuffer; |
|
||||
VkDeviceMemory _indexBufferMemory; |
|
||||
|
|
||||
std::vector<VkBuffer> _uniformBuffers; |
|
||||
std::vector<VkDeviceMemory> _uniformBuffersMemory; |
|
||||
std::vector<void*> _uniformBuffersMapped; |
|
||||
VkDescriptorPool _descriptorPool; |
|
||||
std::vector<VkDescriptorSet> descriptorSets; |
|
||||
}; |
|
||||
|
|
||||
#endif // HELLOTRIANGLEAPPLICATION_H
|
|
@ -0,0 +1,652 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE QtCreatorProject> |
||||
|
<!-- Written by QtCreator 4.10.1, 2024-11-03T17:26:59. --> |
||||
|
<qtcreator> |
||||
|
<data> |
||||
|
<variable>EnvironmentId</variable> |
||||
|
<value type="QByteArray">{9e9cdaa4-317b-4f62-9b8d-2ca42fb59b56}</value> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable> |
||||
|
<value type="int">0</value> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable> |
||||
|
<valuemap type="QVariantMap"> |
||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value> |
||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value> |
||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> |
||||
|
<value type="QString" key="language">Cpp</value> |
||||
|
<valuemap type="QVariantMap" key="value"> |
||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value> |
||||
|
</valuemap> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1"> |
||||
|
<value type="QString" key="language">QmlJS</value> |
||||
|
<valuemap type="QVariantMap" key="value"> |
||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value> |
||||
|
</valuemap> |
||||
|
</valuemap> |
||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value> |
||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value> |
||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> |
||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value> |
||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value> |
||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value> |
||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value> |
||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value> |
||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value> |
||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> |
||||
|
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value> |
||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> |
||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value> |
||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value> |
||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> |
||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> |
||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value> |
||||
|
</valuemap> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable> |
||||
|
<valuemap type="QVariantMap"> |
||||
|
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/> |
||||
|
<value type="bool" key="ClangCodeModel.UseGlobalConfig">false</value> |
||||
|
<value type="QString" key="ClangCodeModel.WarningConfigId">{afe80e93-8983-4e43-ba75-d87634bcd04b}</value> |
||||
|
</valuemap> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.Target.0</variable> |
||||
|
<valuemap type="QVariantMap"> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.13.2 GCC 64bit</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.13.2 GCC 64bit</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5132.gcc_64_kit</value> |
||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> |
||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> |
||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> |
||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ali-mehrabani/Qt_projects/build-VkTest-Desktop_Qt_5_13_2_GCC_64bit-Debug</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> |
||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> |
||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> |
||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> |
||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> |
||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ali-mehrabani/Qt_projects/build-VkTest-Desktop_Qt_5_13_2_GCC_64bit-Release</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> |
||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> |
||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> |
||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> |
||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> |
||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ali-mehrabani/Qt_projects/build-VkTest-Desktop_Qt_5_13_2_GCC_64bit-Profile</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> |
||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> |
||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> |
||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> |
||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> |
||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events"> |
||||
|
<value type="QString">cpu-cycles</value> |
||||
|
</valuelist> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/> |
||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value> |
||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value> |
||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value> |
||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value> |
||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value> |
||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value> |
||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value> |
||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value> |
||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value> |
||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value> |
||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value> |
||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value> |
||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value> |
||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/> |
||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value> |
||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds"> |
||||
|
<value type="int">0</value> |
||||
|
<value type="int">1</value> |
||||
|
<value type="int">2</value> |
||||
|
<value type="int">3</value> |
||||
|
<value type="int">4</value> |
||||
|
<value type="int">5</value> |
||||
|
<value type="int">6</value> |
||||
|
<value type="int">7</value> |
||||
|
<value type="int">8</value> |
||||
|
<value type="int">9</value> |
||||
|
<value type="int">10</value> |
||||
|
<value type="int">11</value> |
||||
|
<value type="int">12</value> |
||||
|
<value type="int">13</value> |
||||
|
<value type="int">14</value> |
||||
|
</valuelist> |
||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value> |
||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VkTest</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/ali-mehrabani/Qt_projects/VkTest/VkTest.pro</value> |
||||
|
<value type="QString" key="RunConfiguration.Arguments"></value> |
||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> |
||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value> |
||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> |
||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value> |
||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value> |
||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> |
||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> |
||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory"></value> |
||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/ali-mehrabani/Qt_projects/build-VkTest-Desktop_Qt_5_13_2_GCC_64bit-Debug</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> |
||||
|
</valuemap> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.Target.1</variable> |
||||
|
<valuemap type="QVariantMap"> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android for arm64-v8a (Clang Qt 5.13.2 for Android ARM64-v8a)</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Android for arm64-v8a (Clang Qt 5.13.2 for Android ARM64-v8a)</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{81fbc123-4ee0-45a6-968a-bd5314a00c8f}</value> |
||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> |
||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> |
||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> |
||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ali-mehrabani/Qt_projects/build-VkTest-Android_for_arm64_v8a_Clang_Qt_5_13_2_for_Android_ARM64_v8a-Debug</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> |
||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Copy application data</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3"> |
||||
|
<value type="QString" key="BuildTargetSdk">android-29</value> |
||||
|
<value type="QString" key="KeystoreLocation"></value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build Android APK</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value> |
||||
|
<value type="bool" key="UseMinistro">false</value> |
||||
|
<value type="bool" key="VerboseOutput">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> |
||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> |
||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> |
||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> |
||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ali-mehrabani/Qt_projects/build-VkTest-Android_for_arm64_v8a_Clang_Qt_5_13_2_for_Android_ARM64_v8a-Release</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> |
||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Copy application data</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3"> |
||||
|
<value type="QString" key="BuildTargetSdk">android-30</value> |
||||
|
<value type="QString" key="KeystoreLocation"></value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build Android APK</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value> |
||||
|
<value type="bool" key="UseMinistro">false</value> |
||||
|
<value type="bool" key="VerboseOutput">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> |
||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> |
||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> |
||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> |
||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ali-mehrabani/Qt_projects/build-VkTest-Android_for_arm64_v8a_Clang_Qt_5_13_2_for_Android_ARM64_v8a-Profile</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> |
||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value> |
||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Copy application data</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3"> |
||||
|
<value type="QString" key="BuildTargetSdk">android-30</value> |
||||
|
<value type="QString" key="KeystoreLocation"></value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build Android APK</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value> |
||||
|
<value type="bool" key="UseMinistro">false</value> |
||||
|
<value type="bool" key="VerboseOutput">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> |
||||
|
</valuemap> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> |
||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> |
||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> |
||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> |
||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> |
||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> |
||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> |
||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> |
||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy to Android device</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployQtStep</value> |
||||
|
<value type="bool" key="UninstallPreviousPackage">false</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy to Android device</value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployConfiguration2</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> |
||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> |
||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events"> |
||||
|
<value type="QString">cpu-cycles</value> |
||||
|
</valuelist> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/> |
||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value> |
||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value> |
||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value> |
||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value> |
||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value> |
||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value> |
||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value> |
||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value> |
||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value> |
||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value> |
||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value> |
||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value> |
||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value> |
||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/> |
||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> |
||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value> |
||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value> |
||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds"> |
||||
|
<value type="int">0</value> |
||||
|
<value type="int">1</value> |
||||
|
<value type="int">2</value> |
||||
|
<value type="int">3</value> |
||||
|
<value type="int">4</value> |
||||
|
<value type="int">5</value> |
||||
|
<value type="int">6</value> |
||||
|
<value type="int">7</value> |
||||
|
<value type="int">8</value> |
||||
|
<value type="int">9</value> |
||||
|
<value type="int">10</value> |
||||
|
<value type="int">11</value> |
||||
|
<value type="int">12</value> |
||||
|
<value type="int">13</value> |
||||
|
<value type="int">14</value> |
||||
|
</valuelist> |
||||
|
<value type="QString" key="Android.AmStartArgsKey"></value> |
||||
|
<valuelist type="QVariantList" key="Android.PostStartShellCmdListKey"/> |
||||
|
<valuelist type="QVariantList" key="Android.PreStartShellCmdListKey"/> |
||||
|
<value type="int" key="PE.EnvironmentAspect.Base">0</value> |
||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:/home/ali-mehrabani/Qt_projects/VkTest/VkTest.pro</value> |
||||
|
<value type="QString" key="RunConfiguration.Arguments"></value> |
||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> |
||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value> |
||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> |
||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value> |
||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> |
||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> |
||||
|
</valuemap> |
||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> |
||||
|
</valuemap> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.TargetCount</variable> |
||||
|
<value type="int">2</value> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable> |
||||
|
<value type="int">22</value> |
||||
|
</data> |
||||
|
<data> |
||||
|
<variable>Version</variable> |
||||
|
<value type="int">22</value> |
||||
|
</data> |
||||
|
</qtcreator> |
File diff suppressed because it is too large
@ -0,0 +1,427 @@ |
|||||
|
#ifndef COMPUTEANDGRAPHICS_H |
||||
|
#define COMPUTEANDGRAPHICS_H |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#ifdef NDEBUG |
||||
|
const bool enableValidationLayers = false; |
||||
|
#else |
||||
|
const bool enableValidationLayers = true; |
||||
|
#endif |
||||
|
|
||||
|
#include "Types.h" |
||||
|
|
||||
|
#include <chrono> |
||||
|
|
||||
|
|
||||
|
#include <optional> |
||||
|
#include <cstdint> // Necessary for uint32_t |
||||
|
#include <limits> // Necessary for std::numeric_limits |
||||
|
#include <algorithm> // Necessary for std::clamp |
||||
|
#include <fstream> |
||||
|
#include <array> |
||||
|
|
||||
|
#ifdef Q_OS_ANDROID |
||||
|
const QString TARGET_PLATFORM = "Android"; |
||||
|
#else |
||||
|
const QString TARGET_PLATFORM = "Linux"; |
||||
|
#endif |
||||
|
|
||||
|
const int MAX_FRAMES_IN_FLIGHT = 2; |
||||
|
|
||||
|
const uint32_t PARTICLE_COUNT = 8192; |
||||
|
|
||||
|
struct Particle { |
||||
|
alignas(16) glm::vec2 position; |
||||
|
alignas(16) glm::vec2 velocity; |
||||
|
alignas(16) glm::vec4 color; |
||||
|
|
||||
|
static VkVertexInputBindingDescription getBindingDescription() { |
||||
|
VkVertexInputBindingDescription bindingDescription{}; |
||||
|
bindingDescription.binding = 0; |
||||
|
bindingDescription.stride = sizeof(Particle); |
||||
|
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; |
||||
|
|
||||
|
return bindingDescription; |
||||
|
} |
||||
|
|
||||
|
static std::array<VkVertexInputAttributeDescription, 2> getAttributeDescriptions() { |
||||
|
std::array<VkVertexInputAttributeDescription, 2> attributeDescriptions{}; |
||||
|
|
||||
|
attributeDescriptions[0].binding = 0; |
||||
|
attributeDescriptions[0].location = 0; |
||||
|
attributeDescriptions[0].format = VK_FORMAT_R32G32_SFLOAT; |
||||
|
attributeDescriptions[0].offset = offsetof(Particle, position); |
||||
|
|
||||
|
attributeDescriptions[1].binding = 0; |
||||
|
attributeDescriptions[1].location = 1; |
||||
|
attributeDescriptions[1].format = VK_FORMAT_R32G32B32A32_SFLOAT; |
||||
|
attributeDescriptions[1].offset = offsetof(Particle, color); |
||||
|
|
||||
|
return attributeDescriptions; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
struct QueueFamilyIndices { |
||||
|
std::optional<uint32_t> graphicsFamily; |
||||
|
std::optional<uint32_t> presentFamily; |
||||
|
|
||||
|
bool isComplete() { |
||||
|
return graphicsFamily.has_value() && presentFamily.has_value(); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
struct Vertex { |
||||
|
alignas(16) glm::vec3 pos; |
||||
|
alignas(16) glm::vec3 color; |
||||
|
alignas(16) glm::vec2 texCoord; |
||||
|
|
||||
|
static VkVertexInputBindingDescription getBindingDescription() { |
||||
|
VkVertexInputBindingDescription bindingDescription{}; |
||||
|
bindingDescription.binding = 0; |
||||
|
bindingDescription.stride = sizeof(Vertex); |
||||
|
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; |
||||
|
|
||||
|
return bindingDescription; |
||||
|
} |
||||
|
|
||||
|
static std::array<VkVertexInputAttributeDescription, 3> getAttributeDescriptions() { |
||||
|
std::array<VkVertexInputAttributeDescription, 3> attributeDescriptions{}; |
||||
|
|
||||
|
attributeDescriptions[0].binding = 0; |
||||
|
attributeDescriptions[0].location = 0; |
||||
|
attributeDescriptions[0].format = VK_FORMAT_R32G32B32_SFLOAT; |
||||
|
attributeDescriptions[0].offset = offsetof(Vertex, pos); |
||||
|
|
||||
|
attributeDescriptions[1].binding = 0; |
||||
|
attributeDescriptions[1].location = 1; |
||||
|
attributeDescriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT; |
||||
|
attributeDescriptions[1].offset = offsetof(Vertex, color); |
||||
|
|
||||
|
attributeDescriptions[2].binding = 0; |
||||
|
attributeDescriptions[2].location = 2; |
||||
|
attributeDescriptions[2].format = VK_FORMAT_R32G32_SFLOAT; |
||||
|
attributeDescriptions[2].offset = offsetof(Vertex, texCoord); |
||||
|
|
||||
|
return attributeDescriptions; |
||||
|
} |
||||
|
|
||||
|
bool operator==(const Vertex& other) const { |
||||
|
return pos == other.pos && color == other.color && texCoord == other.texCoord; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
namespace std { |
||||
|
template<> struct hash<Vertex> { |
||||
|
size_t operator()(Vertex const& vertex) const { |
||||
|
return ((hash<glm::vec3>()(vertex.pos) ^ |
||||
|
(hash<glm::vec3>()(vertex.color) << 1)) >> 1) ^ |
||||
|
(hash<glm::vec2>()(vertex.texCoord) << 1); |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
struct UniformBufferObject { |
||||
|
alignas(16) glm::mat4 model; |
||||
|
alignas(16) glm::mat4 view; |
||||
|
alignas(16) glm::mat4 proj; |
||||
|
}; |
||||
|
|
||||
|
class ComputeAndGraphics |
||||
|
{ |
||||
|
public: |
||||
|
ComputeAndGraphics(); |
||||
|
void run(); |
||||
|
|
||||
|
// Message Callback
|
||||
|
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT /*messageSeverity*/, |
||||
|
VkDebugUtilsMessageTypeFlagsEXT /*messageType*/,const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,void* /*pUserData*/) { |
||||
|
|
||||
|
std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl; |
||||
|
|
||||
|
return VK_FALSE; |
||||
|
} |
||||
|
static std::vector<char> readFile(const std::string& filename); |
||||
|
|
||||
|
static void framebufferResizeCallback(GLFWwindow* window, int width, int height); |
||||
|
// static void framebufferResizeCallback(QQuickWindow* window, int width, int height);
|
||||
|
|
||||
|
private: |
||||
|
void initWindow(); |
||||
|
void initVulkan(); |
||||
|
void mainLoop(); |
||||
|
void cleanup(); |
||||
|
void createInstance(); |
||||
|
|
||||
|
// Enable Validation Layers
|
||||
|
bool checkValidationLayerSupport(); |
||||
|
|
||||
|
// Message Callback
|
||||
|
std::vector<const char*> getRequiredExtensions(); |
||||
|
void setupDebugMessenger(); |
||||
|
|
||||
|
void pickPhysicalDevice(); |
||||
|
void chooseDevice(uint32_t deviceCount); |
||||
|
bool isDeviceSuitable(VkPhysicalDevice device); |
||||
|
|
||||
|
void createLogicalDevice(); |
||||
|
QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device); |
||||
|
|
||||
|
void createSurface(); |
||||
|
|
||||
|
bool checkDeviceExtensionSupport(VkPhysicalDevice device); |
||||
|
SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); |
||||
|
VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats); |
||||
|
VkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes); |
||||
|
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities); |
||||
|
void createSwapChain(); |
||||
|
|
||||
|
void createImageViews(); |
||||
|
|
||||
|
void createGraphicsPipeline(); |
||||
|
VkShaderModule createShaderModule(const std::vector<char>& code); |
||||
|
void createRenderPass(); |
||||
|
|
||||
|
void createFramebuffers(); |
||||
|
void createCommandPool(); |
||||
|
void createCommandBuffer(); |
||||
|
void recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex); |
||||
|
|
||||
|
void drawFrame(); |
||||
|
void createSyncObjects(); |
||||
|
|
||||
|
void recreateSwapChain(); |
||||
|
void cleanupSwapChain(); |
||||
|
|
||||
|
void createVertexBuffer(); |
||||
|
uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties); |
||||
|
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory); |
||||
|
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); |
||||
|
void createIndexBuffer(); |
||||
|
|
||||
|
void createDescriptorSetLayout(); |
||||
|
void createUniformBuffers(); |
||||
|
void updateUniformBuffer(uint32_t currentImage); |
||||
|
void createDescriptorPool(); |
||||
|
void createDescriptorSets(); |
||||
|
|
||||
|
void createTextureImage(); |
||||
|
void createImage(uint32_t width, uint32_t height, uint32_t mipLevels, VkSampleCountFlagBits numSamples, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage |
||||
|
, VkMemoryPropertyFlags properties, VkImage& image, VkDeviceMemory& imageMemory); |
||||
|
VkCommandBuffer beginSingleTimeCommands(); |
||||
|
void endSingleTimeCommands(VkCommandBuffer commandBuffer); |
||||
|
void transitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t mipLevels); |
||||
|
void copyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height); |
||||
|
void createTextureImageView(); |
||||
|
VkImageView createImageView(VkImage image, VkFormat format, VkImageAspectFlags aspectFlags, uint32_t mipLevels); |
||||
|
void createTextureSampler(); |
||||
|
|
||||
|
void createDepthResources(); |
||||
|
VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features); |
||||
|
VkFormat findDepthFormat(); |
||||
|
bool hasStencilComponent(VkFormat format); |
||||
|
|
||||
|
void loadModel(); |
||||
|
|
||||
|
void generateMipmaps(VkImage image, VkFormat imageFormat, int32_t texWidth, int32_t texHeight, uint32_t mipLevels); |
||||
|
|
||||
|
VkSampleCountFlagBits getMaxUsableSampleCount(); |
||||
|
void createColorResources(); |
||||
|
|
||||
|
void createShaderStorageBuffers(); |
||||
|
void createComputePipeline(); |
||||
|
void createComputeCommandBuffers(); |
||||
|
void recordComputeCommandBuffer(VkCommandBuffer commandBuffer); |
||||
|
void createComputeDescriptorSets(); |
||||
|
void createComputeDescriptorSetLayout(); |
||||
|
void createComputeDescriptorPool(); |
||||
|
|
||||
|
VkApplicationInfo createInstanceAppInfo(); |
||||
|
VkDebugUtilsMessengerCreateInfoEXT createInstanceDebugMessengerInfo(); |
||||
|
VkInstanceCreateInfo createInstanceInfo(VkApplicationInfo* appInfo, std::vector<const char*>& extensions |
||||
|
, VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo); |
||||
|
|
||||
|
VkDeviceQueueCreateInfo createQueueInfo(uint32_t queueFamily, uint32_t queueCount, float* queuePriority); |
||||
|
VkPhysicalDeviceFeatures createDeviceFeatures(); |
||||
|
VkDeviceCreateInfo createLogicalDeviceInfo(std::vector<VkDeviceQueueCreateInfo>& queueCreateInfos, VkPhysicalDeviceFeatures* deviceFeatures); |
||||
|
|
||||
|
VkSwapchainCreateInfoKHR createSwapChainInfo(SwapChainSupportDetails swapChainSupport, VkSurfaceKHR _surface, uint32_t imageCount |
||||
|
, VkSurfaceFormatKHR surfaceFormat, VkExtent2D extent, VkPresentModeKHR presentMode); |
||||
|
|
||||
|
VkAttachmentDescription createColorAttachmentInfo(VkFormat format, VkSampleCountFlagBits msaaSamples); |
||||
|
VkAttachmentDescription createDepthAttachmentInfo(VkFormat format, VkSampleCountFlagBits msaaSamples); |
||||
|
VkAttachmentDescription createColorAttachmentResolveInfo(VkFormat format, VkSampleCountFlagBits msaaSamples); |
||||
|
VkAttachmentReference createAttachmentRefInfo(uint32_t offset, VkImageLayout layout); |
||||
|
VkSubpassDescription createSubpassInfo(VkAttachmentReference* colorAttachRef, VkAttachmentReference* depthAttachRef |
||||
|
, VkAttachmentReference* colorAttachResolverRef); |
||||
|
VkRenderPassCreateInfo createRenderPassInfo(std::vector<VkAttachmentDescription>& attachments, VkSubpassDescription* subpass, VkSubpassDependency* dependency); |
||||
|
VkSubpassDependency createSubpassDependencyInfo(); |
||||
|
|
||||
|
VkDescriptorSetLayoutBinding createLayoutBindingInfo(uint32_t offset, VkDescriptorType descType, VkShaderStageFlagBits StageFlags); |
||||
|
|
||||
|
VkPipelineShaderStageCreateInfo createPipelineShaderInfo(VkShaderStageFlagBits stage, VkShaderModule module); |
||||
|
VkPipelineVertexInputStateCreateInfo createPipelineVertexInputInfo(); |
||||
|
VkPipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateInfo(); |
||||
|
VkPipelineDynamicStateCreateInfo createPipelineDynamicStateInfo(std::vector<VkDynamicState>& dynamicStates); |
||||
|
VkPipelineViewportStateCreateInfo createPipelineViewportStateInfo(); |
||||
|
VkPipelineRasterizationStateCreateInfo createPipelineRasterizationStateInfo(); |
||||
|
VkPipelineMultisampleStateCreateInfo createPipelineMultisampleStateInfo(); |
||||
|
VkPipelineColorBlendAttachmentState colorPipelineBlendAttachmentStateInfo(); |
||||
|
VkPipelineColorBlendStateCreateInfo colorPipelineBlendStateInfo(VkPipelineColorBlendAttachmentState* colorBlendAttachment); |
||||
|
VkPipelineLayoutCreateInfo createPipelineLayoutInfo(); |
||||
|
VkPipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateInfo(); |
||||
|
VkPipelineLayoutCreateInfo createComputePipelineLayoutInfo(); |
||||
|
|
||||
|
VkFramebufferCreateInfo createFramebufferInfo(std::vector<VkImageView>& attachments); |
||||
|
|
||||
|
void copyImageToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory, stbi_uc* pixels, VkDeviceSize imageSize); |
||||
|
|
||||
|
VkImageMemoryBarrier initMipmapBarrier(VkImage image); |
||||
|
void setFirstStepMipmapBarrierInfo(VkImageMemoryBarrier& barrier, uint32_t index); |
||||
|
void setSecondStepMipmapBarrierInfo(VkImageMemoryBarrier& barrier, uint32_t index); |
||||
|
void setLastStepMipmapBarrierInfo(VkImageMemoryBarrier& barrier, uint32_t index); |
||||
|
VkImageBlit createBlitMipMapInfo(int32_t mipWidth, int32_t mipHeight, uint32_t index); |
||||
|
|
||||
|
VkImageMemoryBarrier initTransitionLayoutBarrierInfo(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t mipLevels); |
||||
|
void setSrcAndDst(VkImageMemoryBarrier& barrier, VkPipelineStageFlags& sourceStage, VkPipelineStageFlags& destinationStage, VkImageLayout oldLayout |
||||
|
, VkImageLayout newLayout); |
||||
|
|
||||
|
void allocateAndBindImageMemory(VkImage& image, VkDeviceMemory& imageMemory, VkMemoryPropertyFlags properties); |
||||
|
|
||||
|
VkBufferImageCopy createBufferImageCopyInfo(uint32_t width, uint32_t height); |
||||
|
|
||||
|
Vertex createLoadModelVertex(tinyobj::attrib_t attrib, tinyobj::index_t index); |
||||
|
|
||||
|
void copyVerticesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); |
||||
|
void copyIndicesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); |
||||
|
|
||||
|
void allocateAndBindBufferMemory(VkBuffer& buffer, VkDeviceMemory& bufferMemory, VkMemoryPropertyFlags properties); |
||||
|
void copyParticlesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); |
||||
|
|
||||
|
std::vector<Particle> initParticles(); |
||||
|
void initShaderStorageBuffers(VkBuffer& stagingBuffer); |
||||
|
|
||||
|
void allocateDescriptorSets(); |
||||
|
VkDescriptorBufferInfo createDescriptorBufferInfo(VkBuffer buffer, VkDeviceSize range); |
||||
|
VkDescriptorImageInfo createDescriptorImageInfo(); |
||||
|
void addUniformBufferWriteDescriptor(VkWriteDescriptorSet& descriptorWrite, VkDescriptorBufferInfo* bufferInfo, size_t index, uint32_t dstBinding); |
||||
|
void addImageWriteDescriptor(VkWriteDescriptorSet& descriptorWrite, VkDescriptorImageInfo* imageInfo, size_t index, uint32_t dstBinding); |
||||
|
|
||||
|
void allocateComputeDescriptorSets(); |
||||
|
void addStorageBufferWriteDescriptor(VkWriteDescriptorSet& descriptorWrite, VkDescriptorBufferInfo* bufferInfo, size_t index, uint32_t dstBinding); |
||||
|
|
||||
|
void computeSubmission(); |
||||
|
VkSubmitInfo createComputeSubmitInfo(); |
||||
|
VkResult graphicsSubmission(); |
||||
|
void drawSubmission(uint32_t imageIndex, VkSemaphore* waitSemaphores, VkPipelineStageFlags* waitStages, VkSemaphore* signalSemaphores); |
||||
|
VkSubmitInfo createDrawSubmitInfo(VkSemaphore* waitSemaphores, VkPipelineStageFlags* waitStages, VkSemaphore* signalSemaphores); |
||||
|
VkResult presentSubmission(uint32_t imageIndex, VkSemaphore* signalSemaphores); |
||||
|
|
||||
|
VkViewport createViewportInfo(); |
||||
|
VkRect2D createScissorInfo(); |
||||
|
void beginPipelineCommands(VkCommandBuffer commandBuffer); |
||||
|
void beginRenderPass(VkCommandBuffer commandBuffer, uint32_t imageIndex); |
||||
|
|
||||
|
void cleanPipeline(); |
||||
|
void cleanBuffers(); |
||||
|
void cleanSyncObjects(); |
||||
|
void cleanBase(); |
||||
|
|
||||
|
const int32_t WIDTH = 800; |
||||
|
const int32_t HEIGHT = 600; |
||||
|
|
||||
|
const std::string MODEL_PATH = "/home/ali-mehrabani/Qt_projects/VkTest/models/viking_room.obj"; |
||||
|
const std::string TEXTURE_PATH = "/home/ali-mehrabani/Qt_projects/VkTest/textures/viking_room.png"; |
||||
|
|
||||
|
const std::vector<const char*> validationLayers = { |
||||
|
"VK_LAYER_KHRONOS_validation" |
||||
|
}; |
||||
|
const std::vector<const char*> deviceExtensions = { |
||||
|
VK_KHR_SWAPCHAIN_EXTENSION_NAME |
||||
|
}; |
||||
|
// const std::vector<Vertex> _vertices = {
|
||||
|
// {{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 0.0f}, {1.0f, 0.0f}},
|
||||
|
// {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}},
|
||||
|
// {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 1.0f}},
|
||||
|
// {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}},
|
||||
|
|
||||
|
// {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f}},
|
||||
|
// {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
|
||||
|
// {{0.5f, 0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
|
||||
|
// {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}}
|
||||
|
// };
|
||||
|
// const std::vector<uint16_t> _indices = {
|
||||
|
// 0, 1, 2, 2, 3, 0,
|
||||
|
// 4, 5, 6, 6, 7, 4
|
||||
|
// };
|
||||
|
|
||||
|
std::vector<Vertex> _vertices; |
||||
|
std::vector<uint32_t> _indices; |
||||
|
|
||||
|
uint32_t currentFrame = 0; |
||||
|
bool framebufferResized = false; |
||||
|
|
||||
|
GLFWwindow *_window; |
||||
|
// QQuickWindow* _window;
|
||||
|
VkInstance _instance; |
||||
|
VkDebugUtilsMessengerEXT _debugMessenger; |
||||
|
VkPhysicalDevice _physicalDevice; |
||||
|
VkDevice _device; |
||||
|
VkQueue _graphicsQueue; |
||||
|
VkSurfaceKHR _surface; |
||||
|
VkQueue _presentQueue; |
||||
|
VkSwapchainKHR _swapChain; |
||||
|
std::vector<VkImage> _swapChainImages; |
||||
|
VkFormat _swapChainImageFormat; |
||||
|
VkExtent2D _swapChainExtent; |
||||
|
std::vector<VkImageView> _swapChainImageViews; |
||||
|
VkRenderPass _renderPass; |
||||
|
VkDescriptorSetLayout _descriptorSetLayout; |
||||
|
VkPipelineLayout _pipelineLayout; |
||||
|
VkPipeline _graphicsPipeline; |
||||
|
std::vector<VkFramebuffer> _swapChainFramebuffers; |
||||
|
VkCommandPool _commandPool; |
||||
|
std::vector<VkCommandBuffer> _commandBuffers; |
||||
|
std::vector<VkSemaphore> _imageAvailableSemaphores; |
||||
|
std::vector<VkSemaphore> _renderFinishedSemaphores; |
||||
|
std::vector<VkFence> _inFlightFences; |
||||
|
VkBuffer _vertexBuffer; |
||||
|
VkDeviceMemory _vertexBufferMemory; |
||||
|
VkBuffer _indexBuffer; |
||||
|
VkDeviceMemory _indexBufferMemory; |
||||
|
|
||||
|
std::vector<VkBuffer> _uniformBuffers; |
||||
|
std::vector<VkDeviceMemory> _uniformBuffersMemory; |
||||
|
std::vector<void*> _uniformBuffersMapped; |
||||
|
VkDescriptorPool _descriptorPool; |
||||
|
std::vector<VkDescriptorSet> _descriptorSets; |
||||
|
|
||||
|
uint32_t _mipLevels; |
||||
|
VkImage _textureImage; |
||||
|
VkDeviceMemory _textureImageMemory; |
||||
|
VkImageView _textureImageView; |
||||
|
VkSampler _textureSampler; |
||||
|
|
||||
|
VkImage _depthImage; |
||||
|
VkDeviceMemory _depthImageMemory; |
||||
|
VkImageView _depthImageView; |
||||
|
|
||||
|
VkSampleCountFlagBits _msaaSamples = VK_SAMPLE_COUNT_1_BIT; |
||||
|
VkImage _colorImage; |
||||
|
VkDeviceMemory _colorImageMemory; |
||||
|
VkImageView _colorImageView; |
||||
|
|
||||
|
std::vector<VkBuffer> _shaderStorageBuffers; |
||||
|
std::vector<VkDeviceMemory> _shaderStorageBuffersMemory; |
||||
|
VkPipelineLayout _computePipelineLayout; |
||||
|
VkPipeline _computePipeline; |
||||
|
VkDescriptorSetLayout _computeDescriptorSetLayout; |
||||
|
VkDescriptorPool _computeDescriptorPool; |
||||
|
std::vector<VkDescriptorSet> _computeDescriptorSets; |
||||
|
std::vector<VkCommandBuffer> _computeCommandBuffers; |
||||
|
std::vector<VkFence> _computeInFlightFences; |
||||
|
std::vector<VkSemaphore> _computeFinishedSemaphores; |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
#endif // COMPUTEANDGRAPHICS_H
|
File diff suppressed because it is too large
@ -0,0 +1,427 @@ |
|||||
|
#ifndef HELLOTRIANGLEAPPLICATION_H |
||||
|
#define HELLOTRIANGLEAPPLICATION_H |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#ifdef NDEBUG |
||||
|
const bool enableValidationLayers = false; |
||||
|
#else |
||||
|
const bool enableValidationLayers = true; |
||||
|
#endif |
||||
|
|
||||
|
#include "Types.h" |
||||
|
|
||||
|
#include <chrono> |
||||
|
|
||||
|
|
||||
|
#include <optional> |
||||
|
#include <cstdint> // Necessary for uint32_t |
||||
|
#include <limits> // Necessary for std::numeric_limits |
||||
|
#include <algorithm> // Necessary for std::clamp |
||||
|
#include <fstream> |
||||
|
#include <array> |
||||
|
|
||||
|
#ifdef Q_OS_ANDROID |
||||
|
const QString TARGET_PLATFORM = "Android"; |
||||
|
#else |
||||
|
const QString TARGET_PLATFORM = "Linux"; |
||||
|
#endif |
||||
|
|
||||
|
const int MAX_FRAMES_IN_FLIGHT = 2; |
||||
|
|
||||
|
const uint32_t PARTICLE_COUNT = 8192; |
||||
|
|
||||
|
struct Particle { |
||||
|
alignas(16) glm::vec2 position; |
||||
|
alignas(16) glm::vec2 velocity; |
||||
|
alignas(16) glm::vec4 color; |
||||
|
|
||||
|
static VkVertexInputBindingDescription getBindingDescription() { |
||||
|
VkVertexInputBindingDescription bindingDescription{}; |
||||
|
bindingDescription.binding = 0; |
||||
|
bindingDescription.stride = sizeof(Particle); |
||||
|
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; |
||||
|
|
||||
|
return bindingDescription; |
||||
|
} |
||||
|
|
||||
|
static std::array<VkVertexInputAttributeDescription, 2> getAttributeDescriptions() { |
||||
|
std::array<VkVertexInputAttributeDescription, 2> attributeDescriptions{}; |
||||
|
|
||||
|
attributeDescriptions[0].binding = 0; |
||||
|
attributeDescriptions[0].location = 0; |
||||
|
attributeDescriptions[0].format = VK_FORMAT_R32G32_SFLOAT; |
||||
|
attributeDescriptions[0].offset = offsetof(Particle, position); |
||||
|
|
||||
|
attributeDescriptions[1].binding = 0; |
||||
|
attributeDescriptions[1].location = 1; |
||||
|
attributeDescriptions[1].format = VK_FORMAT_R32G32B32A32_SFLOAT; |
||||
|
attributeDescriptions[1].offset = offsetof(Particle, color); |
||||
|
|
||||
|
return attributeDescriptions; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
struct QueueFamilyIndices { |
||||
|
std::optional<uint32_t> graphicsFamily; |
||||
|
std::optional<uint32_t> presentFamily; |
||||
|
|
||||
|
bool isComplete() { |
||||
|
return graphicsFamily.has_value() && presentFamily.has_value(); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
struct Vertex { |
||||
|
alignas(16) glm::vec3 pos; |
||||
|
alignas(16) glm::vec3 color; |
||||
|
alignas(16) glm::vec2 texCoord; |
||||
|
|
||||
|
static VkVertexInputBindingDescription getBindingDescription() { |
||||
|
VkVertexInputBindingDescription bindingDescription{}; |
||||
|
bindingDescription.binding = 0; |
||||
|
bindingDescription.stride = sizeof(Vertex); |
||||
|
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; |
||||
|
|
||||
|
return bindingDescription; |
||||
|
} |
||||
|
|
||||
|
static std::array<VkVertexInputAttributeDescription, 3> getAttributeDescriptions() { |
||||
|
std::array<VkVertexInputAttributeDescription, 3> attributeDescriptions{}; |
||||
|
|
||||
|
attributeDescriptions[0].binding = 0; |
||||
|
attributeDescriptions[0].location = 0; |
||||
|
attributeDescriptions[0].format = VK_FORMAT_R32G32B32_SFLOAT; |
||||
|
attributeDescriptions[0].offset = offsetof(Vertex, pos); |
||||
|
|
||||
|
attributeDescriptions[1].binding = 0; |
||||
|
attributeDescriptions[1].location = 1; |
||||
|
attributeDescriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT; |
||||
|
attributeDescriptions[1].offset = offsetof(Vertex, color); |
||||
|
|
||||
|
attributeDescriptions[2].binding = 0; |
||||
|
attributeDescriptions[2].location = 2; |
||||
|
attributeDescriptions[2].format = VK_FORMAT_R32G32_SFLOAT; |
||||
|
attributeDescriptions[2].offset = offsetof(Vertex, texCoord); |
||||
|
|
||||
|
return attributeDescriptions; |
||||
|
} |
||||
|
|
||||
|
bool operator==(const Vertex& other) const { |
||||
|
return pos == other.pos && color == other.color && texCoord == other.texCoord; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
namespace std { |
||||
|
template<> struct hash<Vertex> { |
||||
|
size_t operator()(Vertex const& vertex) const { |
||||
|
return ((hash<glm::vec3>()(vertex.pos) ^ |
||||
|
(hash<glm::vec3>()(vertex.color) << 1)) >> 1) ^ |
||||
|
(hash<glm::vec2>()(vertex.texCoord) << 1); |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
struct UniformBufferObject { |
||||
|
alignas(16) glm::mat4 model; |
||||
|
alignas(16) glm::mat4 view; |
||||
|
alignas(16) glm::mat4 proj; |
||||
|
}; |
||||
|
|
||||
|
class HelloTriangleApplication |
||||
|
{ |
||||
|
public: |
||||
|
HelloTriangleApplication(); |
||||
|
void run(); |
||||
|
|
||||
|
// Message Callback
|
||||
|
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT /*messageSeverity*/, |
||||
|
VkDebugUtilsMessageTypeFlagsEXT /*messageType*/,const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,void* /*pUserData*/) { |
||||
|
|
||||
|
std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl; |
||||
|
|
||||
|
return VK_FALSE; |
||||
|
} |
||||
|
static std::vector<char> readFile(const std::string& filename); |
||||
|
|
||||
|
static void framebufferResizeCallback(GLFWwindow* window, int width, int height); |
||||
|
// static void framebufferResizeCallback(QQuickWindow* window, int width, int height);
|
||||
|
|
||||
|
private: |
||||
|
void initWindow(); |
||||
|
void initVulkan(); |
||||
|
void mainLoop(); |
||||
|
void cleanup(); |
||||
|
void createInstance(); |
||||
|
|
||||
|
// Enable Validation Layers
|
||||
|
bool checkValidationLayerSupport(); |
||||
|
|
||||
|
// Message Callback
|
||||
|
std::vector<const char*> getRequiredExtensions(); |
||||
|
void setupDebugMessenger(); |
||||
|
|
||||
|
void pickPhysicalDevice(); |
||||
|
void chooseDevice(uint32_t deviceCount); |
||||
|
bool isDeviceSuitable(VkPhysicalDevice device); |
||||
|
|
||||
|
void createLogicalDevice(); |
||||
|
QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device); |
||||
|
|
||||
|
void createSurface(); |
||||
|
|
||||
|
bool checkDeviceExtensionSupport(VkPhysicalDevice device); |
||||
|
SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); |
||||
|
VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats); |
||||
|
VkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes); |
||||
|
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities); |
||||
|
void createSwapChain(); |
||||
|
|
||||
|
void createImageViews(); |
||||
|
|
||||
|
void createGraphicsPipeline(); |
||||
|
VkShaderModule createShaderModule(const std::vector<char>& code); |
||||
|
void createRenderPass(); |
||||
|
|
||||
|
void createFramebuffers(); |
||||
|
void createCommandPool(); |
||||
|
void createCommandBuffer(); |
||||
|
void recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex); |
||||
|
|
||||
|
void drawFrame(); |
||||
|
void createSyncObjects(); |
||||
|
|
||||
|
void recreateSwapChain(); |
||||
|
void cleanupSwapChain(); |
||||
|
|
||||
|
void createVertexBuffer(); |
||||
|
uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties); |
||||
|
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory); |
||||
|
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); |
||||
|
void createIndexBuffer(); |
||||
|
|
||||
|
void createDescriptorSetLayout(); |
||||
|
void createUniformBuffers(); |
||||
|
void updateUniformBuffer(uint32_t currentImage); |
||||
|
void createDescriptorPool(); |
||||
|
void createDescriptorSets(); |
||||
|
|
||||
|
void createTextureImage(); |
||||
|
void createImage(uint32_t width, uint32_t height, uint32_t mipLevels, VkSampleCountFlagBits numSamples, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage |
||||
|
, VkMemoryPropertyFlags properties, VkImage& image, VkDeviceMemory& imageMemory); |
||||
|
VkCommandBuffer beginSingleTimeCommands(); |
||||
|
void endSingleTimeCommands(VkCommandBuffer commandBuffer); |
||||
|
void transitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t mipLevels); |
||||
|
void copyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height); |
||||
|
void createTextureImageView(); |
||||
|
VkImageView createImageView(VkImage image, VkFormat format, VkImageAspectFlags aspectFlags, uint32_t mipLevels); |
||||
|
void createTextureSampler(); |
||||
|
|
||||
|
void createDepthResources(); |
||||
|
VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features); |
||||
|
VkFormat findDepthFormat(); |
||||
|
bool hasStencilComponent(VkFormat format); |
||||
|
|
||||
|
void loadModel(); |
||||
|
|
||||
|
void generateMipmaps(VkImage image, VkFormat imageFormat, int32_t texWidth, int32_t texHeight, uint32_t mipLevels); |
||||
|
|
||||
|
VkSampleCountFlagBits getMaxUsableSampleCount(); |
||||
|
void createColorResources(); |
||||
|
|
||||
|
void createShaderStorageBuffers(); |
||||
|
void createComputePipeline(); |
||||
|
void createComputeCommandBuffers(); |
||||
|
void recordComputeCommandBuffer(VkCommandBuffer commandBuffer); |
||||
|
void createComputeDescriptorSets(); |
||||
|
void createComputeDescriptorSetLayout(); |
||||
|
void createComputeDescriptorPool(); |
||||
|
|
||||
|
VkApplicationInfo createInstanceAppInfo(); |
||||
|
VkDebugUtilsMessengerCreateInfoEXT createInstanceDebugMessengerInfo(); |
||||
|
VkInstanceCreateInfo createInstanceInfo(VkApplicationInfo* appInfo, std::vector<const char*>& extensions |
||||
|
, VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo); |
||||
|
|
||||
|
VkDeviceQueueCreateInfo createQueueInfo(uint32_t queueFamily, uint32_t queueCount, float* queuePriority); |
||||
|
VkPhysicalDeviceFeatures createDeviceFeatures(); |
||||
|
VkDeviceCreateInfo createLogicalDeviceInfo(std::vector<VkDeviceQueueCreateInfo>& queueCreateInfos, VkPhysicalDeviceFeatures* deviceFeatures); |
||||
|
|
||||
|
VkSwapchainCreateInfoKHR createSwapChainInfo(SwapChainSupportDetails swapChainSupport, VkSurfaceKHR _surface, uint32_t imageCount |
||||
|
, VkSurfaceFormatKHR surfaceFormat, VkExtent2D extent, VkPresentModeKHR presentMode); |
||||
|
|
||||
|
VkAttachmentDescription createColorAttachmentInfo(VkFormat format, VkSampleCountFlagBits msaaSamples); |
||||
|
VkAttachmentDescription createDepthAttachmentInfo(VkFormat format, VkSampleCountFlagBits msaaSamples); |
||||
|
VkAttachmentDescription createColorAttachmentResolveInfo(VkFormat format, VkSampleCountFlagBits msaaSamples); |
||||
|
VkAttachmentReference createAttachmentRefInfo(uint32_t offset, VkImageLayout layout); |
||||
|
VkSubpassDescription createSubpassInfo(VkAttachmentReference* colorAttachRef, VkAttachmentReference* depthAttachRef |
||||
|
, VkAttachmentReference* colorAttachResolverRef); |
||||
|
VkRenderPassCreateInfo createRenderPassInfo(std::vector<VkAttachmentDescription>& attachments, VkSubpassDescription* subpass, VkSubpassDependency* dependency); |
||||
|
VkSubpassDependency createSubpassDependencyInfo(); |
||||
|
|
||||
|
VkDescriptorSetLayoutBinding createLayoutBindingInfo(uint32_t offset, VkDescriptorType descType, VkShaderStageFlagBits StageFlags); |
||||
|
|
||||
|
VkPipelineShaderStageCreateInfo createPipelineShaderInfo(VkShaderStageFlagBits stage, VkShaderModule module); |
||||
|
VkPipelineVertexInputStateCreateInfo createPipelineVertexInputInfo(); |
||||
|
VkPipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateInfo(); |
||||
|
VkPipelineDynamicStateCreateInfo createPipelineDynamicStateInfo(std::vector<VkDynamicState>& dynamicStates); |
||||
|
VkPipelineViewportStateCreateInfo createPipelineViewportStateInfo(); |
||||
|
VkPipelineRasterizationStateCreateInfo createPipelineRasterizationStateInfo(); |
||||
|
VkPipelineMultisampleStateCreateInfo createPipelineMultisampleStateInfo(); |
||||
|
VkPipelineColorBlendAttachmentState colorPipelineBlendAttachmentStateInfo(); |
||||
|
VkPipelineColorBlendStateCreateInfo colorPipelineBlendStateInfo(VkPipelineColorBlendAttachmentState* colorBlendAttachment); |
||||
|
VkPipelineLayoutCreateInfo createPipelineLayoutInfo(); |
||||
|
VkPipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateInfo(); |
||||
|
VkPipelineLayoutCreateInfo createComputePipelineLayoutInfo(); |
||||
|
|
||||
|
VkFramebufferCreateInfo createFramebufferInfo(std::vector<VkImageView>& attachments); |
||||
|
|
||||
|
void copyImageToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory, stbi_uc* pixels, VkDeviceSize imageSize); |
||||
|
|
||||
|
VkImageMemoryBarrier initMipmapBarrier(VkImage image); |
||||
|
void setFirstStepMipmapBarrierInfo(VkImageMemoryBarrier& barrier, uint32_t index); |
||||
|
void setSecondStepMipmapBarrierInfo(VkImageMemoryBarrier& barrier, uint32_t index); |
||||
|
void setLastStepMipmapBarrierInfo(VkImageMemoryBarrier& barrier, uint32_t index); |
||||
|
VkImageBlit createBlitMipMapInfo(int32_t mipWidth, int32_t mipHeight, uint32_t index); |
||||
|
|
||||
|
VkImageMemoryBarrier initTransitionLayoutBarrierInfo(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t mipLevels); |
||||
|
void setSrcAndDst(VkImageMemoryBarrier& barrier, VkPipelineStageFlags& sourceStage, VkPipelineStageFlags& destinationStage, VkImageLayout oldLayout |
||||
|
, VkImageLayout newLayout); |
||||
|
|
||||
|
void allocateAndBindImageMemory(VkImage& image, VkDeviceMemory& imageMemory, VkMemoryPropertyFlags properties); |
||||
|
|
||||
|
VkBufferImageCopy createBufferImageCopyInfo(uint32_t width, uint32_t height); |
||||
|
|
||||
|
Vertex createLoadModelVertex(tinyobj::attrib_t attrib, tinyobj::index_t index); |
||||
|
|
||||
|
void copyVerticesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); |
||||
|
void copyIndicesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); |
||||
|
|
||||
|
void allocateAndBindBufferMemory(VkBuffer& buffer, VkDeviceMemory& bufferMemory, VkMemoryPropertyFlags properties); |
||||
|
void copyParticlesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); |
||||
|
|
||||
|
std::vector<Particle> initParticles(); |
||||
|
void initShaderStorageBuffers(VkBuffer& stagingBuffer); |
||||
|
|
||||
|
void allocateDescriptorSets(); |
||||
|
VkDescriptorBufferInfo createDescriptorBufferInfo(VkBuffer buffer, VkDeviceSize range); |
||||
|
VkDescriptorImageInfo createDescriptorImageInfo(); |
||||
|
void addUniformBufferWriteDescriptor(VkWriteDescriptorSet& descriptorWrite, VkDescriptorBufferInfo* bufferInfo, size_t index, uint32_t dstBinding); |
||||
|
void addImageWriteDescriptor(VkWriteDescriptorSet& descriptorWrite, VkDescriptorImageInfo* imageInfo, size_t index, uint32_t dstBinding); |
||||
|
|
||||
|
void allocateComputeDescriptorSets(); |
||||
|
void addStorageBufferWriteDescriptor(VkWriteDescriptorSet& descriptorWrite, VkDescriptorBufferInfo* bufferInfo, size_t index, uint32_t dstBinding); |
||||
|
|
||||
|
void computeSubmission(); |
||||
|
VkSubmitInfo createComputeSubmitInfo(); |
||||
|
VkResult graphicsSubmission(); |
||||
|
void drawSubmission(uint32_t imageIndex, VkSemaphore* waitSemaphores, VkPipelineStageFlags* waitStages, VkSemaphore* signalSemaphores); |
||||
|
VkSubmitInfo createDrawSubmitInfo(VkSemaphore* waitSemaphores, VkPipelineStageFlags* waitStages, VkSemaphore* signalSemaphores); |
||||
|
VkResult presentSubmission(uint32_t imageIndex, VkSemaphore* signalSemaphores); |
||||
|
|
||||
|
VkViewport createViewportInfo(); |
||||
|
VkRect2D createScissorInfo(); |
||||
|
void beginPipelineCommands(VkCommandBuffer commandBuffer); |
||||
|
void beginRenderPass(VkCommandBuffer commandBuffer, uint32_t imageIndex); |
||||
|
|
||||
|
void cleanPipeline(); |
||||
|
void cleanBuffers(); |
||||
|
void cleanSyncObjects(); |
||||
|
void cleanBase(); |
||||
|
|
||||
|
const int32_t WIDTH = 800; |
||||
|
const int32_t HEIGHT = 600; |
||||
|
|
||||
|
const std::string MODEL_PATH = "/home/ali-mehrabani/Qt_projects/VkTest/models/viking_room.obj"; |
||||
|
const std::string TEXTURE_PATH = "/home/ali-mehrabani/Qt_projects/VkTest/textures/viking_room.png"; |
||||
|
|
||||
|
const std::vector<const char*> validationLayers = { |
||||
|
"VK_LAYER_KHRONOS_validation" |
||||
|
}; |
||||
|
const std::vector<const char*> deviceExtensions = { |
||||
|
VK_KHR_SWAPCHAIN_EXTENSION_NAME |
||||
|
}; |
||||
|
// const std::vector<Vertex> _vertices = {
|
||||
|
// {{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 0.0f}, {1.0f, 0.0f}},
|
||||
|
// {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}},
|
||||
|
// {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 1.0f}},
|
||||
|
// {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}},
|
||||
|
|
||||
|
// {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f}},
|
||||
|
// {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
|
||||
|
// {{0.5f, 0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
|
||||
|
// {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}}
|
||||
|
// };
|
||||
|
// const std::vector<uint16_t> _indices = {
|
||||
|
// 0, 1, 2, 2, 3, 0,
|
||||
|
// 4, 5, 6, 6, 7, 4
|
||||
|
// };
|
||||
|
|
||||
|
std::vector<Vertex> _vertices; |
||||
|
std::vector<uint32_t> _indices; |
||||
|
|
||||
|
uint32_t currentFrame = 0; |
||||
|
bool framebufferResized = false; |
||||
|
|
||||
|
GLFWwindow *_window; |
||||
|
// QQuickWindow* _window;
|
||||
|
VkInstance _instance; |
||||
|
VkDebugUtilsMessengerEXT _debugMessenger; |
||||
|
VkPhysicalDevice _physicalDevice; |
||||
|
VkDevice _device; |
||||
|
VkQueue _graphicsQueue; |
||||
|
VkSurfaceKHR _surface; |
||||
|
VkQueue _presentQueue; |
||||
|
VkSwapchainKHR _swapChain; |
||||
|
std::vector<VkImage> _swapChainImages; |
||||
|
VkFormat _swapChainImageFormat; |
||||
|
VkExtent2D _swapChainExtent; |
||||
|
std::vector<VkImageView> _swapChainImageViews; |
||||
|
VkRenderPass _renderPass; |
||||
|
VkDescriptorSetLayout _descriptorSetLayout; |
||||
|
VkPipelineLayout _pipelineLayout; |
||||
|
VkPipeline _graphicsPipeline; |
||||
|
std::vector<VkFramebuffer> _swapChainFramebuffers; |
||||
|
VkCommandPool _commandPool; |
||||
|
std::vector<VkCommandBuffer> _commandBuffers; |
||||
|
std::vector<VkSemaphore> _imageAvailableSemaphores; |
||||
|
std::vector<VkSemaphore> _renderFinishedSemaphores; |
||||
|
std::vector<VkFence> _inFlightFences; |
||||
|
VkBuffer _vertexBuffer; |
||||
|
VkDeviceMemory _vertexBufferMemory; |
||||
|
VkBuffer _indexBuffer; |
||||
|
VkDeviceMemory _indexBufferMemory; |
||||
|
|
||||
|
std::vector<VkBuffer> _uniformBuffers; |
||||
|
std::vector<VkDeviceMemory> _uniformBuffersMemory; |
||||
|
std::vector<void*> _uniformBuffersMapped; |
||||
|
VkDescriptorPool _descriptorPool; |
||||
|
std::vector<VkDescriptorSet> _descriptorSets; |
||||
|
|
||||
|
uint32_t _mipLevels; |
||||
|
VkImage _textureImage; |
||||
|
VkDeviceMemory _textureImageMemory; |
||||
|
VkImageView _textureImageView; |
||||
|
VkSampler _textureSampler; |
||||
|
|
||||
|
VkImage _depthImage; |
||||
|
VkDeviceMemory _depthImageMemory; |
||||
|
VkImageView _depthImageView; |
||||
|
|
||||
|
VkSampleCountFlagBits _msaaSamples = VK_SAMPLE_COUNT_1_BIT; |
||||
|
VkImage _colorImage; |
||||
|
VkDeviceMemory _colorImageMemory; |
||||
|
VkImageView _colorImageView; |
||||
|
|
||||
|
std::vector<VkBuffer> _shaderStorageBuffers; |
||||
|
std::vector<VkDeviceMemory> _shaderStorageBuffersMemory; |
||||
|
VkPipelineLayout _computePipelineLayout; |
||||
|
VkPipeline _computePipeline; |
||||
|
VkDescriptorSetLayout _computeDescriptorSetLayout; |
||||
|
VkDescriptorPool _computeDescriptorPool; |
||||
|
std::vector<VkDescriptorSet> _computeDescriptorSets; |
||||
|
std::vector<VkCommandBuffer> _computeCommandBuffers; |
||||
|
std::vector<VkFence> _computeInFlightFences; |
||||
|
std::vector<VkSemaphore> _computeFinishedSemaphores; |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
#endif // HELLOTRIANGLEAPPLICATION_H
|
@ -0,0 +1,36 @@ |
|||||
|
#ifndef TYPES_H |
||||
|
#define TYPES_H |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <vulkan/vulkan.h> |
||||
|
#include <iostream> |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#define VK_USE_PLATFORM_ |
||||
|
#define GLFW_INCLUDE_VULKAN |
||||
|
#include <GLFW/glfw3.h> |
||||
|
#define GLFW_EXPOSE_NATIVE_ |
||||
|
#include <GLFW/glfw3native.h> |
||||
|
|
||||
|
#define GLM_FORCE_RADIANS |
||||
|
//#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
|
||||
|
#define GLM_FORCE_DEPTH_ZERO_TO_ONE |
||||
|
#include <glm/glm.hpp> |
||||
|
#include <glm/gtc/matrix_transform.hpp> |
||||
|
#define GLM_ENABLE_EXPERIMENTAL |
||||
|
#include <glm/gtx/hash.hpp> |
||||
|
|
||||
|
#include <stb_image/stb_image.h> |
||||
|
#include <tiny_obj_loader/tiny_obj_loader.h> |
||||
|
|
||||
|
#include <QObject> |
||||
|
|
||||
|
struct SwapChainSupportDetails { |
||||
|
VkSurfaceCapabilitiesKHR capabilities; |
||||
|
std::vector<VkSurfaceFormatKHR> formats; |
||||
|
std::vector<VkPresentModeKHR> presentModes; |
||||
|
}; |
||||
|
|
||||
|
#endif // TYPES_H
|
@ -1,17 +0,0 @@ |
|||||
{ |
|
||||
"description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.", |
|
||||
"qt": "/opt/Qt5.13.2/5.13.2/android_arm64_v8a", |
|
||||
"sdk": "/home/ali-mehrabani/host-projects/Android/Sdk", |
|
||||
"sdkBuildToolsRevision": "30.0.0", |
|
||||
"ndk": "/home/ali-mehrabani/host-projects/Android/Sdk/ndk/android-ndk-r20b", |
|
||||
"toolchain-prefix": "llvm", |
|
||||
"tool-prefix": "llvm", |
|
||||
"toolchain-version": "4.9", |
|
||||
"ndk-host": "linux-x86_64", |
|
||||
"target-architecture": "arm64-v8a", |
|
||||
"android-package-source-directory": "/home/ali-mehrabani/Qt_projects/VkTest/android", |
|
||||
"qml-root-path": "/home/ali-mehrabani/Qt_projects/VkTest", |
|
||||
"stdcpp-path": "/home/ali-mehrabani/host-projects/Android/Sdk/ndk/android-ndk-r20b/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so", |
|
||||
"useLLVM": true, |
|
||||
"application-binary": "/home/ali-mehrabani/Qt_projects/VkTest/libVkTest.so" |
|
||||
} |
|
File diff suppressed because it is too large
Binary file not shown.
Binary file not shown.
@ -1,2 +1,6 @@ |
|||||
/usr/bin/glslc shader.vert -o vert.spv |
/usr/bin/glslc shader.vert -o vert.spv |
||||
/usr/bin/glslc shader.frag -o frag.spv |
/usr/bin/glslc shader.frag -o frag.spv |
||||
|
|
||||
|
/usr/bin/glslc shaderCompute.vert -o vertComp.spv |
||||
|
/usr/bin/glslc shaderCompute.frag -o fragComp.spv |
||||
|
/usr/bin/glslc shaderCompute.comp -o compComp.spv |
||||
|
Binary file not shown.
Binary file not shown.
@ -1,9 +1,15 @@ |
|||||
#version 450 |
#version 450 |
||||
|
|
||||
|
layout(binding = 1) uniform sampler2D texSampler; |
||||
|
|
||||
layout(location = 0) in vec3 fragColor; |
layout(location = 0) in vec3 fragColor; |
||||
|
layout(location = 1) in vec2 fragTexCoord; |
||||
|
|
||||
layout(location = 0) out vec4 outColor; |
layout(location = 0) out vec4 outColor; |
||||
|
|
||||
void main() { |
void main() { |
||||
outColor = vec4(fragColor, 1.0); |
outColor = texture(texSampler, fragTexCoord * 1.0); |
||||
|
|
||||
|
vec2 coord = gl_PointCoord - vec2(0.5); |
||||
|
// outColor = vec4(fragColor, 0.5 - length(coord)); |
||||
} |
} |
||||
|
@ -0,0 +1,32 @@ |
|||||
|
#version 450 |
||||
|
|
||||
|
struct Particle { |
||||
|
vec2 position; |
||||
|
vec2 velocity; |
||||
|
vec4 color; |
||||
|
}; |
||||
|
|
||||
|
layout (binding = 0) uniform ParameterUBO { |
||||
|
float deltaTime; |
||||
|
} ubo; |
||||
|
|
||||
|
|
||||
|
layout(std140, binding = 2) readonly buffer ParticleSSBOIn { |
||||
|
Particle particlesIn[ ]; |
||||
|
}; |
||||
|
|
||||
|
layout(std140, binding = 3) buffer ParticleSSBOOut { |
||||
|
Particle particlesOut[ ]; |
||||
|
}; |
||||
|
|
||||
|
layout (local_size_x = 256, local_size_y = 1, local_size_z = 1) in; |
||||
|
|
||||
|
void main() |
||||
|
{ |
||||
|
uint index = gl_GlobalInvocationID.x; |
||||
|
|
||||
|
Particle particleIn = particlesIn[index]; |
||||
|
|
||||
|
particlesOut[index].position = particleIn.position + particleIn.velocity.xy * ubo.deltaTime; |
||||
|
particlesOut[index].velocity = particleIn.velocity; |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
#version 450 |
||||
|
|
||||
|
layout(binding = 1) uniform sampler2D texSampler; |
||||
|
|
||||
|
layout(location = 0) in vec3 fragColor; |
||||
|
layout(location = 1) in vec2 fragTexCoord; |
||||
|
|
||||
|
layout(location = 0) out vec4 outColor; |
||||
|
|
||||
|
void main() { |
||||
|
outColor = texture(texSampler, fragTexCoord * 1.0); |
||||
|
|
||||
|
vec2 coord = gl_PointCoord - vec2(0.5); |
||||
|
// outColor = vec4(fragColor, 0.5 - length(coord)); |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
#version 450 |
||||
|
|
||||
|
layout(binding = 0) uniform UniformBufferObject { |
||||
|
mat4 model; |
||||
|
mat4 view; |
||||
|
mat4 proj; |
||||
|
} ubo; |
||||
|
|
||||
|
layout(location = 0) in vec3 inPosition; |
||||
|
layout(location = 1) in vec3 inColor; |
||||
|
layout(location = 2) in vec2 inTexCoord; |
||||
|
|
||||
|
layout(location = 0) out vec3 fragColor; |
||||
|
layout(location = 1) out vec2 fragTexCoord; |
||||
|
|
||||
|
void main() { |
||||
|
gl_Position = vec4(inPosition, 1.0); |
||||
|
gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0); |
||||
|
|
||||
|
// gl_PointSize = 5.0; |
||||
|
// gl_Position = vec4(inPosition.xy, 1.0, 1.0); |
||||
|
|
||||
|
fragColor = inColor; |
||||
|
fragTexCoord = inTexCoord; |
||||
|
} |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 248 KiB |
After Width: | Height: | Size: 940 KiB |
Loading…
Reference in new issue