first commit

This commit is contained in:
Greg Wells
2025-05-05 19:29:42 -04:00
commit 406d669de0
284 changed files with 32727 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
#include "vulkan/vulkan.h"
#include "gryphn/gryphn_utils.h"
#include "core/textures/gryphn_texture.h"
#include "core/uniform_descriptor/sampler/gryphn_sampler.h"
#include "../../textures/vulkan_texture.h"
#include "../../output_device/vulkan_output_devices.h"
#include "../vulkan_uniform.h"
GN_EXPORT void gnUpdateSamplerUniformFn(gnSamplerUniform& sampler, const gnOutputDevice& outputDevice) {
VkWriteDescriptorSet descriptorWrite{};
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
descriptorWrite.dstSet = sampler.uniform->uniform->descriptorSets[sampler.index];
descriptorWrite.dstBinding = sampler.binding;
descriptorWrite.dstArrayElement = 0;
descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
descriptorWrite.descriptorCount = 1;
VkDescriptorImageInfo imageInfo{};
imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
imageInfo.imageView = sampler.texture->texture->textureImageView;
imageInfo.sampler = sampler.texture->texture->textureSampler;
descriptorWrite.pImageInfo = &imageInfo;
vkUpdateDescriptorSets(outputDevice.outputDevice->device, 1, &descriptorWrite, 0, nullptr);
}

View File

@@ -0,0 +1,65 @@
#include <vulkan/vulkan.h>
#include <gryphn/gryphn_utils.h>
#include "core/buffers/gryphn_buffer.h"
#include "core/uniform_descriptor/uniform_buffer/gryphn_uniform_buffer.h"
#include "../../output_device/vulkan_output_devices.h"
#include "../vulkan_uniform.h"
#include "../../vertex_buffers/vulkan_buffers.h"
GN_EXPORT void gnUpdateBufferUniformFn(gnBufferUniform& uniformBuffer, const gnOutputDevice& outputDevice) {
VkDescriptorBufferInfo bufferInfo{};
bufferInfo.buffer = uniformBuffer.buffer->buffer->buffer;
bufferInfo.offset = 0;
bufferInfo.range = uniformBuffer.size;
VkWriteDescriptorSet descriptorWrite{};
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
descriptorWrite.dstSet = uniformBuffer.uniform->uniform->descriptorSets[uniformBuffer.index];
descriptorWrite.dstBinding = uniformBuffer.binding;
descriptorWrite.dstArrayElement = 0;
descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
descriptorWrite.descriptorCount = 1;
descriptorWrite.pBufferInfo = &bufferInfo;
vkUpdateDescriptorSets(outputDevice.outputDevice->device, 1, &descriptorWrite, 0, nullptr);
}
// #include "vulkan/vulkan.h"
// #include "src/uniform_descriptor/uniform_buffer/gryphn_uniform_buffer.h"
// #include "vertex_buffers/vulkan_buffers.h"
// #include "vertex_buffers/buffer_descriptor/vulkan_buffer_description.h"
// #include "output_device/vulkan_output_devices.h"
// #include "uniform_descriptor/vulkan_descriptor_set.h"
// struct gnPlatformUniformBuffer {
// };
// gnUniformBuffer::gnUniformBuffer() {
// this->uniformBuffer = new gnPlatformUniformBuffer();
// }
// void gnUpdateUniformDescriptor(const gnUniformBuffer& uniformBuffer, const gnOutputDevice& outputDevice) {
// VkDescriptorBufferInfo bufferInfo{};
// bufferInfo.buffer = uniformBuffer.buffer->buffer->buffer;
// bufferInfo.offset = 0;
// bufferInfo.range = uniformBuffer.size;
// VkWriteDescriptorSet descriptorWrite{};
// descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
// descriptorWrite.dstSet = uniformBuffer.descriptorSet->descriptorSet->descriptorSets[uniformBuffer.index];
// descriptorWrite.dstBinding = uniformBuffer.binding;
// descriptorWrite.dstArrayElement = 0;
// descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
// descriptorWrite.descriptorCount = 1;
// descriptorWrite.pBufferInfo = &bufferInfo;
// descriptorWrite.pImageInfo = nullptr; // Optional
// descriptorWrite.pTexelBufferView = nullptr; // Optional
// vkUpdateDescriptorSets(outputDevice.outputDevice->device, 1, &descriptorWrite, 0, nullptr);
// }

View File

@@ -0,0 +1,52 @@
#include "vulkan_uniform.h"
#include "output_device/vulkan_output_devices.h"
#include "vulkan_uniform_layout.h"
void gnUniformSetCount(gnUniform& uniform, gnUInt count) {
uniform.descriptorCount = count;
}
void gnUniformSetLayout(gnUniform& uniform, gnUniformLayout* uniformLayout) {
uniform.uniformLayout = uniformLayout;
}
GN_EXPORT gnReturnCode gnCreateUniformFn(gnUniform* uniform, gnOutputDevice& outputDevice) {
uniform->uniform = new gnPlatformUniform();
uniform->uniform->outputDevice = &outputDevice;
std::vector<VkDescriptorPoolSize> poolSizes;
poolSizes.resize(uniform->uniformLayout->bindings.size());
for (int i = 0; i < uniform->uniformLayout->bindings.size(); i++) {
poolSizes[i].type = (uniform->uniformLayout->bindings[i].type == GN_UNIFORM_BUFFER_DESCRIPTOR) ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER : VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
poolSizes[i].descriptorCount = static_cast<uint32_t>(uniform->descriptorCount);
}
VkDescriptorPoolCreateInfo poolInfo{};
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
poolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
poolInfo.pPoolSizes = poolSizes.data();
poolInfo.maxSets = static_cast<uint32_t>(uniform->descriptorCount);
if (vkCreateDescriptorPool(outputDevice.outputDevice->device, &poolInfo, nullptr, &uniform->uniform->descriptorPool) != VK_SUCCESS) {
return GN_FAILED;
}
std::vector<VkDescriptorSetLayout> layouts(uniform->descriptorCount, uniform->uniformLayout->uniformLayout->setLayout);
VkDescriptorSetAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = uniform->uniform->descriptorPool;
allocInfo.descriptorSetCount = static_cast<uint32_t>(uniform->descriptorCount);
allocInfo.pSetLayouts = layouts.data();
uniform->uniform->descriptorSets.resize(uniform->descriptorCount);
if (vkAllocateDescriptorSets(outputDevice.outputDevice->device, &allocInfo, &uniform->uniform->descriptorSets[0]) != VK_SUCCESS) {
return GN_FAILED;
}
return GN_SUCCESS;
}
GN_EXPORT void gnDestroyUniformFn(gnUniform& uniform) {
vkDestroyDescriptorPool(uniform.uniform->outputDevice->outputDevice->device, uniform.uniform->descriptorPool, nullptr);
}

View File

@@ -0,0 +1,12 @@
#pragma once
#include <vulkan/vulkan.h>
#include <vector>
#include <core/uniform_descriptor/gryphn_uniform.h>
struct gnOutputDevice;
struct gnPlatformUniform {
VkDescriptorPool descriptorPool;
gnOutputDevice* outputDevice;
std::vector<VkDescriptorSet> descriptorSets;
};

View File

@@ -0,0 +1,40 @@
#include "vulkan_uniform_layout.h"
#include "output_device/vulkan_output_devices.h"
GN_EXPORT gnReturnCode gnCreateUniformLayoutFn(gnUniformLayout* uniformLayout, gnOutputDevice& device) {
uniformLayout->uniformLayout = new gnPlatformUniformLayout();
uniformLayout->uniformLayout->outputDevice = &device;
std::vector<VkDescriptorSetLayoutBinding> bindings(uniformLayout->bindings.size());
for (int i = 0; i < uniformLayout->bindings.size(); i++) {
bindings[i] = {};
bindings[i].binding = uniformLayout->bindings[i].binding;
bindings[i].descriptorType = (uniformLayout->bindings[i].type == GN_UNIFORM_BUFFER_DESCRIPTOR) ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER : VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
bindings[i].descriptorCount = 1;
int stageBit = 0;
if (gnContainsShaderStage(uniformLayout->bindings[i].stage, GN_VERTEX_SHADER_MODULE)) stageBit |= VK_SHADER_STAGE_VERTEX_BIT;
if (gnContainsShaderStage(uniformLayout->bindings[i].stage, GN_FRAGMENT_SHADER_MODULE)) stageBit |= VK_SHADER_STAGE_FRAGMENT_BIT;
bindings[i].stageFlags = stageBit;
bindings[i].pImmutableSamplers = nullptr;
}
VkDescriptorSetLayoutCreateInfo layoutInfo{};
layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
layoutInfo.bindingCount = static_cast<uint32_t>(uniformLayout->bindings.size());
layoutInfo.pBindings = bindings.data();
if (vkCreateDescriptorSetLayout(device.outputDevice->device, &layoutInfo, nullptr, &uniformLayout->uniformLayout->setLayout) != VK_SUCCESS) {
return GN_FAILED;
}
return GN_SUCCESS;
}
GN_EXPORT void gnDestroyUniformLayoutFn(gnUniformLayout& uniformLayout) {
vkDestroyDescriptorSetLayout(uniformLayout.uniformLayout->outputDevice->outputDevice->device, uniformLayout.uniformLayout->setLayout, nullptr);
}

View File

@@ -0,0 +1,12 @@
#pragma once
#include "gryphn/gryphn.h"
#include <vulkan/vulkan.h>
struct gnPlatformUniformLayout {
gnOutputDevice* outputDevice;
VkDescriptorSetLayout setLayout;
};
struct gnPlatformUniformLayoutBinding {
// nothing here
};