rgba textures and binding the decriptor sets
This commit is contained in:
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
VkShaderStageFlagBits vkGryphnShaderModuleStage(gnShaderModuleStage stage) {
|
VkShaderStageFlagBits vkGryphnShaderModuleStage(gnShaderModuleStage stage) {
|
||||||
VkShaderStageFlagBits outStage = 0;
|
VkShaderStageFlagBits outStage = 0;
|
||||||
switch(stage) {
|
|
||||||
case GN_VERTEX_SHADER_MODULE: outStage |= VK_SHADER_STAGE_VERTEX_BIT; break;
|
if ((stage & GN_VERTEX_SHADER_MODULE) == GN_VERTEX_SHADER_MODULE) outStage |= VK_SHADER_STAGE_VERTEX_BIT;
|
||||||
case GN_FRAGMENT_SHADER_MODULE: outStage |= VK_SHADER_STAGE_FRAGMENT_BIT; break;
|
if ((stage & GN_FRAGMENT_SHADER_MODULE) == GN_FRAGMENT_SHADER_MODULE) outStage |= VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||||
case GN_ALL_SHADER_MODULE: return VK_SHADER_STAGE_ALL_GRAPHICS;
|
if ((stage & GN_ALL_SHADER_MODULE) == GN_ALL_SHADER_MODULE) return VK_SHADER_STAGE_ALL_GRAPHICS;
|
||||||
}
|
|
||||||
return outStage;
|
return outStage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -114,6 +114,7 @@ gnReturnCode gnCreateTextureFn(gnTexture texture, gnDevice device, const gnTextu
|
|||||||
|
|
||||||
size_t imageSize = info.width * info.height;
|
size_t imageSize = info.width * info.height;
|
||||||
if (info.format == GN_FORMAT_BGRA8_SRGB) { imageSize *= 4; }
|
if (info.format == GN_FORMAT_BGRA8_SRGB) { imageSize *= 4; }
|
||||||
|
if (info.format == GN_FORMAT_RGBA8_SRGB) { imageSize *= 4; }
|
||||||
|
|
||||||
gnReturnCode staginBufferCreateCode = VkCreateBuffer(
|
gnReturnCode staginBufferCreateCode = VkCreateBuffer(
|
||||||
&texture->texture->buffer, imageSize, device,
|
&texture->texture->buffer, imageSize, device,
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
#include "buffers/vulkan_buffer.h"
|
#include "buffers/vulkan_buffer.h"
|
||||||
#include "output_device/vulkan_output_devices.h"
|
#include "output_device/vulkan_output_devices.h"
|
||||||
#include "core/uniforms/gryphn_uniform_pool.h"
|
#include "core/uniforms/gryphn_uniform_pool.h"
|
||||||
|
#include "textures/vulkan_texture.h"
|
||||||
|
|
||||||
void gnUpdateBufferUniformFn(gnUniform uniform, gnBufferUniformInfo* info) {
|
void gnUpdateBufferUniformFn(gnUniform uniform, gnBufferUniformInfo* info) {
|
||||||
VkDescriptorBufferInfo bufferInfo = {
|
VkDescriptorBufferInfo bufferInfo = {
|
||||||
@@ -22,3 +23,23 @@ void gnUpdateBufferUniformFn(gnUniform uniform, gnBufferUniformInfo* info) {
|
|||||||
|
|
||||||
vkUpdateDescriptorSets(uniform->pool->device->outputDevice->device, 1, &write, 0, NULL);
|
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);
|
||||||
|
}
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
VkDescriptorType vkGryphnUniformType(gnUniformType type) {
|
VkDescriptorType vkGryphnUniformType(gnUniformType type) {
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case GN_UNIFORM_BUFFER_DESCRIPTOR: return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
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;
|
case GN_UNIFORM_TYPE_MAX: return VK_DESCRIPTOR_TYPE_MAX_ENUM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -110,7 +110,8 @@ gnSurfaceDetails gnGetSurfaceDetailsFn(
|
|||||||
|
|
||||||
VkFormat vkGryphnFormatToVulkanFormat(gnImageFormat format) {
|
VkFormat vkGryphnFormatToVulkanFormat(gnImageFormat format) {
|
||||||
switch (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;
|
default: return VK_FORMAT_UNDEFINED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -91,6 +91,7 @@ typedef struct gnDeviceFunctions_t {
|
|||||||
void (*_gnDestroyUniformPool)(gnUniformPool pool);
|
void (*_gnDestroyUniformPool)(gnUniformPool pool);
|
||||||
|
|
||||||
void (*_gnUpdateBufferUniform)(gnUniform uniform, gnBufferUniformInfo* bufferInfo);
|
void (*_gnUpdateBufferUniform)(gnUniform uniform, gnBufferUniformInfo* bufferInfo);
|
||||||
|
void (*_gnUpdateImageUniform)(gnUniform uniform, gnImageUniformInfo* imageInfo);
|
||||||
|
|
||||||
gnReturnCode (*_gnCreateTexture)(gnTexture texture, gnDevice device, const gnTextureInfo info);
|
gnReturnCode (*_gnCreateTexture)(gnTexture texture, gnDevice device, const gnTextureInfo info);
|
||||||
void (*_gnTextureData)(gnTextureHandle texture, void* pixelData);
|
void (*_gnTextureData)(gnTextureHandle texture, void* pixelData);
|
||||||
|
@@ -93,6 +93,7 @@ void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFuncti
|
|||||||
gnLoadDLLFunction(lib, functions->_gnUniformPoolAllocateUniforms, "gnUniformPoolAllocateUniformsFn");
|
gnLoadDLLFunction(lib, functions->_gnUniformPoolAllocateUniforms, "gnUniformPoolAllocateUniformsFn");
|
||||||
gnLoadDLLFunction(lib, functions->_gnDestroyUniformPool, "gnDestroyUniformPoolFn");
|
gnLoadDLLFunction(lib, functions->_gnDestroyUniformPool, "gnDestroyUniformPoolFn");
|
||||||
gnLoadDLLFunction(lib, functions->_gnUpdateBufferUniform, "gnUpdateBufferUniformFn");
|
gnLoadDLLFunction(lib, functions->_gnUpdateBufferUniform, "gnUpdateBufferUniformFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnUpdateImageUniform, "gnUpdateImageUniformFn");
|
||||||
gnLoadDLLFunction(lib, functions->_gnCreateTexture, "gnCreateTextureFn");
|
gnLoadDLLFunction(lib, functions->_gnCreateTexture, "gnCreateTextureFn");
|
||||||
gnLoadDLLFunction(lib, functions->_gnTextureData, "gnTextureDataFn");
|
gnLoadDLLFunction(lib, functions->_gnTextureData, "gnTextureDataFn");
|
||||||
gnLoadDLLFunction(lib, functions->_gnDestroyTexture, "gnDestroyTextureFn");
|
gnLoadDLLFunction(lib, functions->_gnDestroyTexture, "gnDestroyTextureFn");
|
||||||
|
@@ -6,3 +6,7 @@
|
|||||||
void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo) {
|
void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo) {
|
||||||
uniform->pool->device->deviceFunctions->_gnUpdateBufferUniform(uniform, &bufferInfo);
|
uniform->pool->device->deviceFunctions->_gnUpdateBufferUniform(uniform, &bufferInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gnUpdateImageUniform(gnUniform uniform, gnImageUniformInfo imageInfo) {
|
||||||
|
uniform->pool->device->deviceFunctions->_gnUpdateImageUniform(uniform, &imageInfo);
|
||||||
|
}
|
||||||
|
@@ -11,6 +11,11 @@ typedef struct gnBufferUniformInfo {
|
|||||||
size_t size;
|
size_t size;
|
||||||
} gnBufferUniformInfo;
|
} gnBufferUniformInfo;
|
||||||
|
|
||||||
|
typedef struct gnImageUniformInfo {
|
||||||
|
uint32_t binding;
|
||||||
|
gnTexture texture;
|
||||||
|
} gnImageUniformInfo;
|
||||||
|
|
||||||
#ifdef GN_REVEAL_IMPL
|
#ifdef GN_REVEAL_IMPL
|
||||||
struct gnUniform_t {
|
struct gnUniform_t {
|
||||||
struct gnPlatformUniform_t* uniform;
|
struct gnPlatformUniform_t* uniform;
|
||||||
@@ -20,3 +25,4 @@ struct gnUniform_t {
|
|||||||
GN_ARRAY_LIST(gnUniform)
|
GN_ARRAY_LIST(gnUniform)
|
||||||
|
|
||||||
void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo);
|
void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo);
|
||||||
|
void gnUpdateImageUniform(gnUniform uniform, gnImageUniformInfo imageInfo);
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
typedef enum gnUniformType {
|
typedef enum gnUniformType {
|
||||||
GN_UNIFORM_BUFFER_DESCRIPTOR,
|
GN_UNIFORM_BUFFER_DESCRIPTOR,
|
||||||
|
GN_IMAGE_DESCRIPTOR,
|
||||||
GN_UNIFORM_TYPE_MAX
|
GN_UNIFORM_TYPE_MAX
|
||||||
} gnUniformType;
|
} gnUniformType;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user