Archived
1
Fork 0

Fixes some clang-tidy warnings, remove fpermissive

This commit is contained in:
redstrate 2021-09-13 22:53:42 -04:00
parent f213d3d548
commit b61eb98648
5 changed files with 55 additions and 46 deletions

View file

@ -2,11 +2,6 @@ macro(set_engine_properties target)
target_compile_features(${target} PUBLIC cxx_std_17) target_compile_features(${target} PUBLIC cxx_std_17)
set_target_properties(${target} PROPERTIES CXX_EXTENSIONS OFF) set_target_properties(${target} PROPERTIES CXX_EXTENSIONS OFF)
if(ENABLE_MACOS OR ENABLE_LINUX)
target_compile_options(${target} PUBLIC
-fpermissive) # ew but required for now TODO: remove and test!
endif()
if(ENABLE_MACOS) if(ENABLE_MACOS)
target_compile_definitions(${target} PUBLIC PLATFORM_MACOS) target_compile_definitions(${target} PUBLIC PLATFORM_MACOS)
endif() endif()

View file

@ -37,7 +37,7 @@ namespace ImGui {
ImGui::ProgressBar(progress_saturated, ImVec2(0.0f, 0.0f), buf); ImGui::ProgressBar(progress_saturated, ImVec2(0.0f, 0.0f), buf);
ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
ImGui::Text(label); ImGui::Text("%s", label);
} }
inline bool DragQuat(const char* label, Quaternion* quat) { inline bool DragQuat(const char* label, Quaternion* quat) {

View file

@ -94,6 +94,8 @@ void engine::quit() {
bool engine::is_quitting() const { bool engine::is_quitting() const {
if(!windows.empty()) if(!windows.empty())
return windows[0]->quit_requested; return windows[0]->quit_requested;
return false;
} }
void engine::prepare_quit() { void engine::prepare_quit() {

View file

@ -11,7 +11,6 @@
struct NativeSurface { struct NativeSurface {
int identifier = -1; int identifier = -1;
void* windowNativeHandle;
uint32_t surfaceWidth = -1, surfaceHeight = -1; uint32_t surfaceWidth = -1, surfaceHeight = -1;
std::vector<VkSemaphore> imageAvailableSemaphores; std::vector<VkSemaphore> imageAvailableSemaphores;
@ -36,28 +35,28 @@ class GFXVulkanPipeline;
class GFXVulkan : public GFX { class GFXVulkan : public GFX {
public: public:
bool is_supported() { return true; } bool is_supported() override { return true; }
ShaderLanguage accepted_shader_language() override { return ShaderLanguage::SPIRV; } ShaderLanguage accepted_shader_language() override { return ShaderLanguage::SPIRV; }
GFXContext required_context() { return GFXContext::Vulkan; } GFXContext required_context() override { return GFXContext::Vulkan; }
const char* get_name() override; const char* get_name() override;
bool supports_feature(const GFXFeature feature) override; bool supports_feature(GFXFeature feature) override;
bool initialize(const GFXCreateInfo& info) override; bool initialize(const GFXCreateInfo& info) override;
void initialize_view(void* native_handle, const int identifier, const uint32_t width, const uint32_t height) override; void initialize_view(void* native_handle, int identifier, uint32_t width, uint32_t height) override;
void recreate_view(const int identifier, const uint32_t width, const uint32_t height) override; void recreate_view(int identifier, uint32_t width, uint32_t height) override;
// buffer operations // buffer operations
GFXBuffer* create_buffer(void* data, const GFXSize size, const bool dynamic_data, const GFXBufferUsage usage) override; GFXBuffer* create_buffer(void* data, GFXSize size, bool dynamic_data, GFXBufferUsage usage) override;
void copy_buffer(GFXBuffer* buffer, void* data, const GFXSize offset, const GFXSize size) override; void copy_buffer(GFXBuffer* buffer, void* data, GFXSize offset, GFXSize size) override;
void* get_buffer_contents(GFXBuffer* buffer) override; void* get_buffer_contents(GFXBuffer* buffer) override;
void release_buffer_contents(GFXBuffer* buffer, void* handle) override; void release_buffer_contents(GFXBuffer* buffer, void* handle) override;
// texture operations // texture operations
GFXTexture* create_texture(const GFXTextureCreateInfo& info) override; GFXTexture* create_texture(const GFXTextureCreateInfo& info) override;
void copy_texture(GFXTexture* texture, void* data, const GFXSize size) override; void copy_texture(GFXTexture* texture, void* data, GFXSize size) override;
void copy_texture(GFXTexture* from, GFXTexture* to) override; void copy_texture(GFXTexture* from, GFXTexture* to) override;
void copy_texture(GFXTexture* from, GFXBuffer* to) override; void copy_texture(GFXTexture* from, GFXBuffer* to) override;
@ -75,11 +74,11 @@ public:
GFXPipeline* create_compute_pipeline(const GFXComputePipelineCreateInfo& info) override; GFXPipeline* create_compute_pipeline(const GFXComputePipelineCreateInfo& info) override;
// misc operations // misc operations
GFXSize get_alignment(const GFXSize size) override; GFXSize get_alignment(GFXSize size) override;
GFXCommandBuffer* acquire_command_buffer(bool for_presentation_use = false) override; GFXCommandBuffer* acquire_command_buffer(bool for_presentation_use) override;
void submit(GFXCommandBuffer* command_buffer, const int identifier) override; void submit(GFXCommandBuffer* command_buffer, int identifier) override;
private: private:
void createInstance(std::vector<const char*> layers, std::vector<const char*> extensions); void createInstance(std::vector<const char*> layers, std::vector<const char*> extensions);
@ -104,7 +103,7 @@ private:
VkImageLayout newLayout, VkImageLayout newLayout,
VkPipelineStageFlags src_stage_mask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VkPipelineStageFlags src_stage_mask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
VkPipelineStageFlags dst_stage_mask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); VkPipelineStageFlags dst_stage_mask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
VkShaderModule createShaderModule(const uint32_t* code, const int length); VkShaderModule createShaderModule(const uint32_t* code, int length);
VkCommandBuffer beginSingleTimeCommands(); VkCommandBuffer beginSingleTimeCommands();
void endSingleTimeCommands(VkCommandBuffer commandBuffer); void endSingleTimeCommands(VkCommandBuffer commandBuffer);

View file

@ -76,6 +76,8 @@ VkFormat toVkFormat(GFXVertexFormat format) {
VkBlendFactor toVkFactor(GFXBlendFactor factor) { VkBlendFactor toVkFactor(GFXBlendFactor factor) {
switch (factor) { switch (factor) {
case GFXBlendFactor::Zero:
return VK_BLEND_FACTOR_ZERO;
case GFXBlendFactor::One: case GFXBlendFactor::One:
return VK_BLEND_FACTOR_ONE; return VK_BLEND_FACTOR_ONE;
case GFXBlendFactor::OneMinusSrcAlpha: case GFXBlendFactor::OneMinusSrcAlpha:
@ -84,6 +86,12 @@ VkBlendFactor toVkFactor(GFXBlendFactor factor) {
return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR; return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR;
case GFXBlendFactor::SrcAlpha: case GFXBlendFactor::SrcAlpha:
return VK_BLEND_FACTOR_SRC_ALPHA; return VK_BLEND_FACTOR_SRC_ALPHA;
case GFXBlendFactor::DstAlpha:
return VK_BLEND_FACTOR_DST_ALPHA;
case GFXBlendFactor::SrcColor:
return VK_BLEND_FACTOR_SRC_COLOR;
case GFXBlendFactor::DstColor:
return VK_BLEND_FACTOR_DST_COLOR;
} }
return VK_BLEND_FACTOR_ONE; return VK_BLEND_FACTOR_ONE;
@ -223,11 +231,10 @@ bool GFXVulkan::initialize(const GFXCreateInfo& info) {
void GFXVulkan::initialize_view(void* native_handle, const int identifier, const uint32_t width, const uint32_t height) { void GFXVulkan::initialize_view(void* native_handle, const int identifier, const uint32_t width, const uint32_t height) {
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
NativeSurface* surface = new NativeSurface(); auto surface = new NativeSurface();
surface->identifier = identifier; surface->identifier = identifier;
surface->surfaceWidth = width; surface->surfaceWidth = width;
surface->surfaceHeight = height; surface->surfaceHeight = height;
surface->windowNativeHandle = native_handle;
createSwapchain(surface); createSwapchain(surface);
createSyncPrimitives(surface); createSyncPrimitives(surface);
@ -253,7 +260,7 @@ void GFXVulkan::recreate_view(const int identifier, const uint32_t width, const
} }
GFXBuffer* GFXVulkan::create_buffer(void *data, const GFXSize size, const bool dynamic_data, const GFXBufferUsage usage) { GFXBuffer* GFXVulkan::create_buffer(void *data, const GFXSize size, const bool dynamic_data, const GFXBufferUsage usage) {
GFXVulkanBuffer* buffer = new GFXVulkanBuffer(); auto buffer = new GFXVulkanBuffer();
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
@ -301,7 +308,7 @@ GFXBuffer* GFXVulkan::create_buffer(void *data, const GFXSize size, const bool d
} }
void GFXVulkan::copy_buffer(GFXBuffer* buffer, void* data, GFXSize offset, GFXSize size) { void GFXVulkan::copy_buffer(GFXBuffer* buffer, void* data, GFXSize offset, GFXSize size) {
GFXVulkanBuffer* vulkanBuffer = (GFXVulkanBuffer*)buffer; auto vulkanBuffer = (GFXVulkanBuffer*)buffer;
void* mapped_data = nullptr; void* mapped_data = nullptr;
vkMapMemory(device, vulkanBuffer->memory, offset, vulkanBuffer->size - offset, 0, &mapped_data); vkMapMemory(device, vulkanBuffer->memory, offset, vulkanBuffer->size - offset, 0, &mapped_data);
@ -321,7 +328,7 @@ void GFXVulkan::copy_buffer(GFXBuffer* buffer, void* data, GFXSize offset, GFXSi
} }
void* GFXVulkan::get_buffer_contents(GFXBuffer* buffer) { void* GFXVulkan::get_buffer_contents(GFXBuffer* buffer) {
GFXVulkanBuffer* vulkanBuffer = (GFXVulkanBuffer*)buffer; auto vulkanBuffer = (GFXVulkanBuffer*)buffer;
void* mapped_data; void* mapped_data;
vkMapMemory(device, vulkanBuffer->memory, 0, VK_WHOLE_SIZE, 0, &mapped_data); vkMapMemory(device, vulkanBuffer->memory, 0, VK_WHOLE_SIZE, 0, &mapped_data);
@ -330,7 +337,7 @@ void* GFXVulkan::get_buffer_contents(GFXBuffer* buffer) {
} }
void GFXVulkan::release_buffer_contents(GFXBuffer* buffer, void* handle) { void GFXVulkan::release_buffer_contents(GFXBuffer* buffer, void* handle) {
GFXVulkanBuffer* vulkanBuffer = (GFXVulkanBuffer*)buffer; auto vulkanBuffer = (GFXVulkanBuffer*)buffer;
VkMappedMemoryRange range = {}; VkMappedMemoryRange range = {};
range.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; range.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
@ -343,7 +350,7 @@ void GFXVulkan::release_buffer_contents(GFXBuffer* buffer, void* handle) {
} }
GFXTexture* GFXVulkan::create_texture(const GFXTextureCreateInfo& info) { GFXTexture* GFXVulkan::create_texture(const GFXTextureCreateInfo& info) {
GFXVulkanTexture* texture = new GFXVulkanTexture(); auto texture = new GFXVulkanTexture();
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
@ -508,7 +515,7 @@ GFXTexture* GFXVulkan::create_texture(const GFXTextureCreateInfo& info) {
} }
void GFXVulkan::copy_texture(GFXTexture* texture, void* data, GFXSize size) { void GFXVulkan::copy_texture(GFXTexture* texture, void* data, GFXSize size) {
GFXVulkanTexture* vulkanTexture = (GFXVulkanTexture*)texture; auto vulkanTexture = (GFXVulkanTexture*)texture;
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
@ -577,8 +584,8 @@ void GFXVulkan::copy_texture(GFXTexture* from, GFXTexture* to) {
} }
void GFXVulkan::copy_texture(GFXTexture* from, GFXBuffer* to) { void GFXVulkan::copy_texture(GFXTexture* from, GFXBuffer* to) {
GFXVulkanTexture* vulkanTexture = (GFXVulkanTexture*)from; auto vulkanTexture = (GFXVulkanTexture*)from;
GFXVulkanBuffer* vulkanBuffer = (GFXVulkanBuffer*)to; auto vulkanBuffer = (GFXVulkanBuffer*)to;
VkCommandBuffer commandBuffer = beginSingleTimeCommands(); VkCommandBuffer commandBuffer = beginSingleTimeCommands();
@ -599,7 +606,7 @@ void GFXVulkan::copy_texture(GFXTexture* from, GFXBuffer* to) {
} }
GFXSampler* GFXVulkan::create_sampler(const GFXSamplerCreateInfo& info) { GFXSampler* GFXVulkan::create_sampler(const GFXSamplerCreateInfo& info) {
GFXVulkanSampler* sampler = new GFXVulkanSampler(); auto sampler = new GFXVulkanSampler();
const VkSamplerAddressMode samplerMode = toSamplerMode(info.samplingMode); const VkSamplerAddressMode samplerMode = toSamplerMode(info.samplingMode);
@ -623,15 +630,15 @@ GFXSampler* GFXVulkan::create_sampler(const GFXSamplerCreateInfo& info) {
} }
GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& info) { GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& info) {
GFXVulkanFramebuffer* framebuffer = new GFXVulkanFramebuffer(); auto framebuffer = new GFXVulkanFramebuffer();
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
GFXVulkanRenderPass* renderPass = (GFXVulkanRenderPass*)info.render_pass; auto renderPass = (GFXVulkanRenderPass*)info.render_pass;
std::vector<VkImageView> attachments; std::vector<VkImageView> attachments;
for (auto& attachment : info.attachments) { for (auto& attachment : info.attachments) {
GFXVulkanTexture* texture = (GFXVulkanTexture*)attachment; auto texture = (GFXVulkanTexture*)attachment;
attachments.push_back(texture->view); attachments.push_back(texture->view);
VkImageLayout expectedLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; VkImageLayout expectedLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
@ -667,7 +674,7 @@ GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& in
} }
GFXRenderPass* GFXVulkan::create_render_pass(const GFXRenderPassCreateInfo& info) { GFXRenderPass* GFXVulkan::create_render_pass(const GFXRenderPassCreateInfo& info) {
GFXVulkanRenderPass* renderPass = new GFXVulkanRenderPass(); auto renderPass = new GFXVulkanRenderPass();
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
@ -756,7 +763,7 @@ GFXRenderPass* GFXVulkan::create_render_pass(const GFXRenderPassCreateInfo& info
} }
GFXPipeline* GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreateInfo& info) { GFXPipeline* GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreateInfo& info) {
GFXVulkanPipeline* pipeline = new GFXVulkanPipeline(); auto pipeline = new GFXVulkanPipeline();
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
@ -929,6 +936,8 @@ GFXPipeline* GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreate
case GFXDepthMode::Greater: case GFXDepthMode::Greater:
depthStencil.depthCompareOp = VK_COMPARE_OP_GREATER; depthStencil.depthCompareOp = VK_COMPARE_OP_GREATER;
break; break;
case GFXDepthMode::None:
break;
} }
} }
@ -982,6 +991,8 @@ GFXPipeline* GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreate
case GFXBindingType::Sampler: case GFXBindingType::Sampler:
descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
break; break;
case GFXBindingType::PushConstant:
break;
} }
VkDescriptorSetLayoutBinding layoutBinding = {}; VkDescriptorSetLayoutBinding layoutBinding = {};
@ -1045,7 +1056,7 @@ GFXPipeline* GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreate
} }
GFXPipeline* GFXVulkan::create_compute_pipeline(const GFXComputePipelineCreateInfo& info) { GFXPipeline* GFXVulkan::create_compute_pipeline(const GFXComputePipelineCreateInfo& info) {
GFXVulkanPipeline* pipeline = new GFXVulkanPipeline(); auto pipeline = new GFXVulkanPipeline();
vkDeviceWaitIdle(device); vkDeviceWaitIdle(device);
@ -1117,6 +1128,8 @@ GFXPipeline* GFXVulkan::create_compute_pipeline(const GFXComputePipelineCreateIn
case GFXBindingType::Sampler: case GFXBindingType::Sampler:
descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
break; break;
case GFXBindingType::PushConstant:
break;
} }
VkDescriptorSetLayoutBinding layoutBinding = {}; VkDescriptorSetLayoutBinding layoutBinding = {};
@ -1170,7 +1183,7 @@ GFXSize GFXVulkan::get_alignment(GFXSize size) {
} }
GFXCommandBuffer* GFXVulkan::acquire_command_buffer(bool for_presentation_use) { GFXCommandBuffer* GFXVulkan::acquire_command_buffer(bool for_presentation_use) {
GFXVulkanCommandBuffer* cmdbuf = new GFXVulkanCommandBuffer(); auto cmdbuf = new GFXVulkanCommandBuffer();
if(!for_presentation_use) { if(!for_presentation_use) {
VkCommandBufferAllocateInfo info = {}; VkCommandBufferAllocateInfo info = {};
@ -1203,7 +1216,7 @@ void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) {
VkCommandBuffer cmd = VK_NULL_HANDLE; VkCommandBuffer cmd = VK_NULL_HANDLE;
GFXVulkanCommandBuffer* cmdbuf = (GFXVulkanCommandBuffer*)command_buffer; auto cmdbuf = (GFXVulkanCommandBuffer*)command_buffer;
if(cmdbuf->handle != VK_NULL_HANDLE) if(cmdbuf->handle != VK_NULL_HANDLE)
cmd = cmdbuf->handle; cmd = cmdbuf->handle;
else if(current_surface != nullptr) else if(current_surface != nullptr)
@ -1252,8 +1265,8 @@ void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) {
vkCmdEndRenderPass(cmd); vkCmdEndRenderPass(cmd);
} }
GFXVulkanRenderPass* renderPass = (GFXVulkanRenderPass*)command.data.set_render_pass.render_pass; auto renderPass = (GFXVulkanRenderPass*)command.data.set_render_pass.render_pass;
GFXVulkanFramebuffer* framebuffer = (GFXVulkanFramebuffer*)command.data.set_render_pass.framebuffer; auto framebuffer = (GFXVulkanFramebuffer*)command.data.set_render_pass.framebuffer;
if (renderPass != nullptr) { if (renderPass != nullptr) {
currentRenderPass = renderPass->handle; currentRenderPass = renderPass->handle;
@ -1423,8 +1436,8 @@ void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) {
break; break;
case GFXCommandType::CopyTexture: case GFXCommandType::CopyTexture:
{ {
GFXVulkanTexture* src = (GFXVulkanTexture*)command.data.copy_texture.src; auto src = (GFXVulkanTexture*)command.data.copy_texture.src;
GFXVulkanTexture* dst = (GFXVulkanTexture*)command.data.copy_texture.dst; auto dst = (GFXVulkanTexture*)command.data.copy_texture.dst;
const int slice_offset = command.data.copy_texture.to_slice + command.data.copy_texture.to_layer * 6; const int slice_offset = command.data.copy_texture.to_slice + command.data.copy_texture.to_layer * 6;
@ -1528,7 +1541,7 @@ void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) {
break; break;
case GFXCommandType::GenerateMipmaps: case GFXCommandType::GenerateMipmaps:
{ {
auto texture = static_cast<GFXVulkanTexture*>(command.data.generate_mipmaps.texture); auto texture = dynamic_cast<GFXVulkanTexture*>(command.data.generate_mipmaps.texture);
for(int l = 0; l < texture->range.layerCount; l++) { for(int l = 0; l < texture->range.layerCount; l++) {
int mip_width = texture->width; int mip_width = texture->width;
@ -2089,7 +2102,7 @@ void GFXVulkan::cacheDescriptorState(GFXVulkanPipeline* pipeline, VkDescriptorSe
// update set // update set
for (auto [i, buffer] : utility::enumerate(boundShaderBuffers)) { for (auto [i, buffer] : utility::enumerate(boundShaderBuffers)) {
if (buffer.buffer != nullptr) { if (buffer.buffer != nullptr) {
GFXVulkanBuffer* vulkanBuffer = (GFXVulkanBuffer*)buffer.buffer; auto vulkanBuffer = (GFXVulkanBuffer*)buffer.buffer;
VkDescriptorBufferInfo bufferInfo = {}; VkDescriptorBufferInfo bufferInfo = {};
bufferInfo.buffer = vulkanBuffer->handle; // will this break? bufferInfo.buffer = vulkanBuffer->handle; // will this break?
@ -2110,7 +2123,7 @@ void GFXVulkan::cacheDescriptorState(GFXVulkanPipeline* pipeline, VkDescriptorSe
for (auto [i, texture] : utility::enumerate(boundTextures)) { for (auto [i, texture] : utility::enumerate(boundTextures)) {
if (texture != nullptr) { if (texture != nullptr) {
GFXVulkanTexture* vulkanTexture = (GFXVulkanTexture*) texture; auto vulkanTexture = (GFXVulkanTexture*) texture;
VkDescriptorImageInfo imageInfo = {}; VkDescriptorImageInfo imageInfo = {};
imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
@ -2146,7 +2159,7 @@ void GFXVulkan::cacheDescriptorState(GFXVulkanPipeline* pipeline, VkDescriptorSe
for (auto [i, sampler] : utility::enumerate(boundSamplers)) { for (auto [i, sampler] : utility::enumerate(boundSamplers)) {
if (sampler != nullptr) { if (sampler != nullptr) {
GFXVulkanSampler* vulkanSampler = (GFXVulkanSampler*) sampler; auto vulkanSampler = (GFXVulkanSampler*) sampler;
VkDescriptorImageInfo imageInfo = {}; VkDescriptorImageInfo imageInfo = {};
imageInfo.sampler = vulkanSampler->sampler; imageInfo.sampler = vulkanSampler->sampler;