rgba textures and binding the decriptor sets

This commit is contained in:
Gregory Wells
2025-06-14 22:08:29 -04:00
parent 012e842e1d
commit 7071d01835
10 changed files with 44 additions and 7 deletions

View File

@@ -4,11 +4,11 @@
VkShaderStageFlagBits vkGryphnShaderModuleStage(gnShaderModuleStage stage) {
VkShaderStageFlagBits outStage = 0;
switch(stage) {
case GN_VERTEX_SHADER_MODULE: outStage |= VK_SHADER_STAGE_VERTEX_BIT; break;
case GN_FRAGMENT_SHADER_MODULE: outStage |= VK_SHADER_STAGE_FRAGMENT_BIT; break;
case GN_ALL_SHADER_MODULE: return VK_SHADER_STAGE_ALL_GRAPHICS;
}
if ((stage & GN_VERTEX_SHADER_MODULE) == GN_VERTEX_SHADER_MODULE) outStage |= VK_SHADER_STAGE_VERTEX_BIT;
if ((stage & GN_FRAGMENT_SHADER_MODULE) == GN_FRAGMENT_SHADER_MODULE) outStage |= VK_SHADER_STAGE_FRAGMENT_BIT;
if ((stage & GN_ALL_SHADER_MODULE) == GN_ALL_SHADER_MODULE) return VK_SHADER_STAGE_ALL_GRAPHICS;
return outStage;
}

View File

@@ -6,7 +6,7 @@
VkImageType vkGryphnTextureType(gnTextureType type) {
switch(type) {
case GN_TEXTURE_2D: return VK_IMAGE_TYPE_2D;
case GN_TEXTURE_2D: return VK_IMAGE_TYPE_2D;
}
}
@@ -114,6 +114,7 @@ gnReturnCode gnCreateTextureFn(gnTexture texture, gnDevice device, const gnTextu
size_t imageSize = info.width * info.height;
if (info.format == GN_FORMAT_BGRA8_SRGB) { imageSize *= 4; }
if (info.format == GN_FORMAT_RGBA8_SRGB) { imageSize *= 4; }
gnReturnCode staginBufferCreateCode = VkCreateBuffer(
&texture->texture->buffer, imageSize, device,

View File

@@ -2,6 +2,7 @@
#include "buffers/vulkan_buffer.h"
#include "output_device/vulkan_output_devices.h"
#include "core/uniforms/gryphn_uniform_pool.h"
#include "textures/vulkan_texture.h"
void gnUpdateBufferUniformFn(gnUniform uniform, gnBufferUniformInfo* info) {
VkDescriptorBufferInfo bufferInfo = {
@@ -22,3 +23,23 @@ void gnUpdateBufferUniformFn(gnUniform uniform, gnBufferUniformInfo* info) {
vkUpdateDescriptorSets(uniform->pool->device->outputDevice->device, 1, &write, 0, NULL);
}
void gnUpdateImageUniformFn(gnUniform uniform, gnImageUniformInfo* info) {
VkDescriptorImageInfo imageInfo = {
.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
.imageView = info->texture->texture->image.imageView,
.sampler = info->texture->texture->sampler
};
VkWriteDescriptorSet write = {
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
.descriptorCount = 1,
.pImageInfo = &imageInfo,
.dstSet = uniform->uniform->set,
.dstBinding = info->binding,
.dstArrayElement = 0
};
vkUpdateDescriptorSets(uniform->pool->device->outputDevice->device, 1, &write, 0, NULL);
}

View File

@@ -4,6 +4,7 @@
VkDescriptorType vkGryphnUniformType(gnUniformType type) {
switch(type) {
case GN_UNIFORM_BUFFER_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
case GN_IMAGE_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
case GN_UNIFORM_TYPE_MAX: return VK_DESCRIPTOR_TYPE_MAX_ENUM;
}
}

View File

@@ -110,7 +110,8 @@ gnSurfaceDetails gnGetSurfaceDetailsFn(
VkFormat vkGryphnFormatToVulkanFormat(gnImageFormat format) {
switch (format) {
case GN_FORMAT_BGRA8_SRGB: { return VK_FORMAT_B8G8R8A8_SRGB; }
case GN_FORMAT_BGRA8_SRGB: return VK_FORMAT_B8G8R8A8_SRGB;
case GN_FORMAT_RGBA8_SRGB: return VK_FORMAT_R8G8B8A8_SRGB;
default: return VK_FORMAT_UNDEFINED;
}
}