Updated gitignore, got basic polygon UI pipeline rendering shapes with offsets/colors
parent
1fa7b38624
commit
e9d3a71a1d
@ -0,0 +1,21 @@
|
||||
#ifndef COMMAND_H
|
||||
#define COMMAND_H
|
||||
|
||||
#include "vulkan/vulkan_core.h"
|
||||
|
||||
typedef struct QueueStruct {
|
||||
VkQueue handle;
|
||||
uint32_t family;
|
||||
uint32_t index;
|
||||
} Queue;
|
||||
|
||||
|
||||
VkCommandBuffer command_begin_single(VkDevice device, VkCommandPool transfer_pool);
|
||||
|
||||
VkResult command_end_single(VkDevice device, VkCommandBuffer command_buffer, VkCommandPool transfer_pool, Queue transfer_queue);
|
||||
|
||||
VkResult command_transition_image_layout(VkDevice device, VkCommandPool transfer_pool, Queue transfer_queue, VkImageLayout old_layout, VkImageLayout new_layout, VkImage image, VkAccessFlags src_mask, VkAccessFlags dst_mask, VkPipelineStageFlags source, VkPipelineStageFlags dest, uint32_t source_family, uint32_t dest_family, VkImageAspectFlags aspect_flags);
|
||||
|
||||
VkResult command_transition_image_layout(VkDevice device, VkCommandPool transfer_pool, Queue transfer_queue, VkImageLayout old_layout, VkImageLayout new_layout, VkImage image, VkAccessFlags src_mask, VkAccessFlags dst_mask, VkPipelineStageFlags source, VkPipelineStageFlags dest, uint32_t source_family, uint32_t dest_family, VkImageAspectFlags aspect_flags);
|
||||
|
||||
#endif
|
@ -0,0 +1,10 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in vec4 fragColor;
|
||||
|
||||
layout(location = 0) out vec4 outColor;
|
||||
|
||||
void main() {
|
||||
outColor = fragColor;
|
||||
}
|
||||
|
@ -0,0 +1,19 @@
|
||||
#version 450
|
||||
#extension GL_EXT_buffer_reference : require
|
||||
|
||||
layout(set = 0, binding = 0) uniform UIUniform {
|
||||
vec2 screen;
|
||||
} scene;
|
||||
|
||||
layout(location = 0) in vec2 inVertexPosition;
|
||||
layout(location = 1) in vec3 inPolygonPosition;
|
||||
layout(location = 2) in vec2 inPolygonSize;
|
||||
layout(location = 3) in vec4 inColor;
|
||||
|
||||
layout(location = 0) out vec4 fragColor;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(vec3(inVertexPosition * inPolygonSize, 0.0) + inPolygonPosition, 1.0);
|
||||
fragColor = inColor;
|
||||
}
|
||||
|
@ -0,0 +1,104 @@
|
||||
#include "command.h"
|
||||
|
||||
VkCommandBuffer command_begin_single(VkDevice device, VkCommandPool transfer_pool) {
|
||||
VkCommandBufferAllocateInfo command_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
|
||||
.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
|
||||
.commandPool = transfer_pool,
|
||||
.commandBufferCount = 1,
|
||||
};
|
||||
|
||||
VkCommandBuffer command_buffer;
|
||||
VkResult result = vkAllocateCommandBuffers(device, &command_info, &command_buffer);
|
||||
if(result != VK_SUCCESS) {
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
VkCommandBufferBeginInfo begin_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
|
||||
.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
|
||||
};
|
||||
|
||||
result = vkBeginCommandBuffer(command_buffer, &begin_info);
|
||||
if(result != VK_SUCCESS) {
|
||||
vkFreeCommandBuffers(device, transfer_pool, 1, &command_buffer);
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
return command_buffer;
|
||||
}
|
||||
|
||||
VkResult command_end_single(VkDevice device, VkCommandBuffer command_buffer, VkCommandPool transfer_pool, Queue transfer_queue) {
|
||||
VkResult result = vkEndCommandBuffer(command_buffer);
|
||||
if(result != VK_SUCCESS) {
|
||||
vkFreeCommandBuffers(device, transfer_pool, 1, &command_buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
VkSubmitInfo submit_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
|
||||
.commandBufferCount = 1,
|
||||
.pCommandBuffers = &command_buffer,
|
||||
};
|
||||
|
||||
result = vkQueueSubmit(transfer_queue.handle, 1, &submit_info, 0);
|
||||
if(result != VK_SUCCESS) {
|
||||
vkFreeCommandBuffers(device, transfer_pool, 1, &command_buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = vkQueueWaitIdle(transfer_queue.handle);
|
||||
vkFreeCommandBuffers(device, transfer_pool, 1, &command_buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
VkResult command_transition_image_layout(VkDevice device, VkCommandPool transfer_pool, Queue transfer_queue, VkImageLayout old_layout, VkImageLayout new_layout, VkImage image, VkAccessFlags src_mask, VkAccessFlags dst_mask, VkPipelineStageFlags source, VkPipelineStageFlags dest, uint32_t source_family, uint32_t dest_family, VkImageAspectFlags aspect_flags) {
|
||||
VkCommandBuffer command_buffer = command_begin_single(device, transfer_pool);
|
||||
|
||||
VkImageMemoryBarrier barrier = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.oldLayout = old_layout,
|
||||
.newLayout = new_layout,
|
||||
.srcQueueFamilyIndex = source_family,
|
||||
.dstQueueFamilyIndex = dest_family,
|
||||
.image = image,
|
||||
.subresourceRange = {
|
||||
.aspectMask = aspect_flags,
|
||||
.levelCount = 1,
|
||||
.layerCount = 1,
|
||||
.baseMipLevel = 0,
|
||||
.baseArrayLayer = 0,
|
||||
},
|
||||
.srcAccessMask = src_mask,
|
||||
.dstAccessMask = dst_mask,
|
||||
};
|
||||
vkCmdPipelineBarrier(command_buffer, source, dest, 0, 0, 0, 0, 0, 1, &barrier);
|
||||
|
||||
return command_end_single(device, command_buffer, transfer_pool, transfer_queue);
|
||||
}
|
||||
|
||||
VkResult command_copy_buffer_to_image(VkDevice device, VkCommandPool transfer_pool, Queue transfer_queue, VkExtent3D image_size, VkBuffer source, VkImage dest) {
|
||||
VkCommandBuffer command_buffer = command_begin_single(device, transfer_pool);
|
||||
|
||||
VkBufferImageCopy region = {
|
||||
.bufferOffset = 0,
|
||||
.bufferRowLength = 0,
|
||||
.bufferImageHeight = 0,
|
||||
.imageSubresource = {
|
||||
.baseArrayLayer = 0,
|
||||
.layerCount = 1,
|
||||
.mipLevel = 0,
|
||||
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
},
|
||||
.imageOffset = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.z = 0,
|
||||
},
|
||||
.imageExtent = image_size,
|
||||
};
|
||||
|
||||
vkCmdCopyBufferToImage(command_buffer, source, dest, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion);
|
||||
|
||||
return command_end_single(device, command_buffer, transfer_pool, transfer_queue);
|
||||
}
|
Loading…
Reference in New Issue