texture usage flags
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
#include "vulkan_graphics_pipeline.h"
|
#include "vulkan_graphics_pipeline.h"
|
||||||
#include "output_device/vulkan_output_devices.h"
|
#include "output_device/vulkan_output_devices.h"
|
||||||
|
#include "output_device/vulkan_physical_device.h"
|
||||||
#include "shader_module/vulkan_shader_module.h"
|
#include "shader_module/vulkan_shader_module.h"
|
||||||
#include "renderpass/vulkan_render_pass_descriptor.h"
|
#include "renderpass/vulkan_render_pass_descriptor.h"
|
||||||
#include "uniforms/vulkan_uniform_layout.h"
|
#include "uniforms/vulkan_uniform_layout.h"
|
||||||
|
|
||||||
|
|
||||||
VkDynamicState vkGryphnDynamicStateToVulkanDynamicState(gnDynamicState state) {
|
VkDynamicState vkGryphnDynamicStateToVulkanDynamicState(gnDynamicState state) {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case GN_DYNAMIC_VIEWPORT: return VK_DYNAMIC_STATE_VIEWPORT;
|
case GN_DYNAMIC_VIEWPORT: return VK_DYNAMIC_STATE_VIEWPORT;
|
||||||
@@ -177,7 +179,7 @@ gnReturnCode createGraphicsPipeline(gnGraphicsPipeline graphicsPipeline, gnDevic
|
|||||||
VkPipelineMultisampleStateCreateInfo multisampling = {
|
VkPipelineMultisampleStateCreateInfo multisampling = {
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
||||||
.sampleShadingEnable = VK_FALSE,
|
.sampleShadingEnable = VK_FALSE,
|
||||||
.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT
|
.rasterizationSamples = gnSampleCountToVulkan(info.multisample.samples)
|
||||||
};
|
};
|
||||||
|
|
||||||
graphicsPipeline->graphicsPipeline->colorBlendAttachment = (VkPipelineColorBlendAttachmentState){
|
graphicsPipeline->graphicsPipeline->colorBlendAttachment = (VkPipelineColorBlendAttachmentState){
|
||||||
|
@@ -24,6 +24,18 @@ VkSamplerAddressMode vkGryphnTextureWrap(gnTextureWrap wrap) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VkImageUsageFlags gnImageUsageToVulkan(gnTextureUsageFlags flags) {
|
||||||
|
VkImageUsageFlags vkFlags = 0;
|
||||||
|
|
||||||
|
if ((flags & GN_TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT) == GN_TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT) vkFlags |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||||
|
if ((flags & GN_TEXTURE_USAGE_COLOR_ATTACHMENT) == GN_TEXTURE_USAGE_COLOR_ATTACHMENT) vkFlags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||||
|
if ((flags & GN_TEXTURE_USAGE_SAMPLED) == GN_TEXTURE_USAGE_SAMPLED) vkFlags |= VK_IMAGE_USAGE_SAMPLED_BIT;
|
||||||
|
if ((flags & GN_TEXTURE_USAGE_WRITE_TARGET) == GN_TEXTURE_USAGE_WRITE_TARGET) vkFlags |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||||
|
if ((flags & GN_TEXTURE_RESOLVE_ATTACHMENT) == GN_TEXTURE_RESOLVE_ATTACHMENT) vkFlags |= VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT;
|
||||||
|
|
||||||
|
return vkFlags;
|
||||||
|
}
|
||||||
|
|
||||||
VkImageAspectFlags vkGryphnGetAspectFlags(gnImageFormat format) {
|
VkImageAspectFlags vkGryphnGetAspectFlags(gnImageFormat format) {
|
||||||
VkImageAspectFlags aspectMask = 0;
|
VkImageAspectFlags aspectMask = 0;
|
||||||
|
|
||||||
@@ -147,6 +159,7 @@ gnReturnCode createTexture(gnTexture texture, gnDevice device, const gnTextureIn
|
|||||||
.tiling = VK_IMAGE_TILING_OPTIMAL,
|
.tiling = VK_IMAGE_TILING_OPTIMAL,
|
||||||
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
|
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
|
||||||
.samples = gnSampleCountToVulkan(info.samples),
|
.samples = gnSampleCountToVulkan(info.samples),
|
||||||
|
.usage = gnImageUsageToVulkan(info.usage),
|
||||||
.extent = {
|
.extent = {
|
||||||
.width = info.extent.width,
|
.width = info.extent.width,
|
||||||
.height = info.extent.height,
|
.height = info.extent.height,
|
||||||
@@ -158,11 +171,6 @@ gnReturnCode createTexture(gnTexture texture, gnDevice device, const gnTextureIn
|
|||||||
.format = vkGryphnFormatToVulkanFormat(info.format)
|
.format = vkGryphnFormatToVulkanFormat(info.format)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (vkGryphnIsDepthStencil(info.format))
|
|
||||||
imageInfo.usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
|
||||||
else
|
|
||||||
imageInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
|
||||||
|
|
||||||
VkResult res = vkCreateImage(device->outputDevice->device, &imageInfo, NULL, &texture->texture->image.image);
|
VkResult res = vkCreateImage(device->outputDevice->device, &imageInfo, NULL, &texture->texture->image.image);
|
||||||
if (res == VK_ERROR_FORMAT_NOT_SUPPORTED) return GN_UNSUPPORTED_IMAGE_FORMAT;
|
if (res == VK_ERROR_FORMAT_NOT_SUPPORTED) return GN_UNSUPPORTED_IMAGE_FORMAT;
|
||||||
else if (res != VK_SUCCESS) return GN_FAILED_TO_CREATE_IMAGE;
|
else if (res != VK_SUCCESS) return GN_FAILED_TO_CREATE_IMAGE;
|
||||||
|
@@ -46,6 +46,10 @@ typedef struct gnScissor {
|
|||||||
gnUInt2 size;
|
gnUInt2 size;
|
||||||
} gnScissor;
|
} gnScissor;
|
||||||
|
|
||||||
|
typedef struct gnMultisample {
|
||||||
|
gnMultisampleCountFlags samples;
|
||||||
|
} gnMultisample;
|
||||||
|
|
||||||
typedef enum gnFillMode {
|
typedef enum gnFillMode {
|
||||||
GN_FILL_MODE_FILL, GN_FILL_MODE_LINE, GN_FILL_MODE_POINT
|
GN_FILL_MODE_FILL, GN_FILL_MODE_LINE, GN_FILL_MODE_POINT
|
||||||
} gnFillMode;
|
} gnFillMode;
|
||||||
@@ -118,6 +122,8 @@ typedef struct gnGraphicsPipelineInfo {
|
|||||||
gnShaderInputLayout shaderInputLayout;
|
gnShaderInputLayout shaderInputLayout;
|
||||||
|
|
||||||
gnUniformLayout uniformLayout;
|
gnUniformLayout uniformLayout;
|
||||||
|
|
||||||
|
gnMultisample multisample;
|
||||||
} gnGraphicsPipelineInfo;
|
} gnGraphicsPipelineInfo;
|
||||||
|
|
||||||
#ifdef GN_REVEAL_IMPL
|
#ifdef GN_REVEAL_IMPL
|
||||||
|
@@ -17,9 +17,18 @@ typedef enum gnTextureWrap {
|
|||||||
GN_REPEAT, GN_MIRRORED_REPEAT, GN_CLAMP_TO_EDGE, GN_CLAMP_TO_BORDER
|
GN_REPEAT, GN_MIRRORED_REPEAT, GN_CLAMP_TO_EDGE, GN_CLAMP_TO_BORDER
|
||||||
} gnTextureWrap;
|
} gnTextureWrap;
|
||||||
|
|
||||||
|
typedef enum gnTextureUsageFlags {
|
||||||
|
GN_TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT = 1 << 0,
|
||||||
|
GN_TEXTURE_USAGE_COLOR_ATTACHMENT = 1 << 1,
|
||||||
|
GN_TEXTURE_USAGE_SAMPLED = 1 << 2,
|
||||||
|
GN_TEXTURE_USAGE_WRITE_TARGET = 1 << 3,
|
||||||
|
GN_TEXTURE_RESOLVE_ATTACHMENT = 1 << 4
|
||||||
|
} gnTextureUsageFlags;
|
||||||
|
|
||||||
typedef struct gnTextureInfo {
|
typedef struct gnTextureInfo {
|
||||||
gnExtent3D extent;
|
gnExtent3D extent;
|
||||||
gnMultisampleCountFlags samples;
|
gnMultisampleCountFlags samples;
|
||||||
|
gnTextureUsageFlags usage;
|
||||||
uint32_t mipmapLevels;
|
uint32_t mipmapLevels;
|
||||||
gnTextureType type;
|
gnTextureType type;
|
||||||
gnImageFormat format;
|
gnImageFormat format;
|
||||||
|
Reference in New Issue
Block a user