diff --git a/include/Refresh.h b/include/Refresh.h index e2e9b27..f5eaab5 100644 --- a/include/Refresh.h +++ b/include/Refresh.h @@ -519,6 +519,18 @@ typedef struct Refresh_ShaderModuleCreateInfo const uint32_t *byteCode; } Refresh_ShaderModuleCreateInfo; +typedef struct Refresh_TextureCreateInfo +{ + uint32_t width; + uint32_t height; + uint32_t depth; + uint32_t isCube; + Refresh_SampleCount sampleCount; + uint32_t levelCount; + Refresh_ColorFormat format; + Refresh_TextureUsageFlags usageFlags; +} Refresh_TextureCreateInfo; + /* Pipeline state structures */ typedef struct Refresh_ShaderStageState @@ -856,64 +868,12 @@ REFRESHAPI Refresh_ShaderModule* Refresh_CreateShaderModule( Refresh_ShaderModuleCreateInfo *shaderModuleCreateInfo ); -/* Creates a 2D texture. - * - * format: The pixel format of the texture data. - * width: The width of the texture image. - * height: The height of the texture image. - * levelCount: The number of mipmap levels to allocate. - * usageFlags: Specifies how the texture will be used. - * - * Returns an allocated Refresh_Texture* object. Note that the contents of +/* Returns an allocated Refresh_Texture* object. Note that the contents of * the texture are undefined until SetData is called. */ -REFRESHAPI Refresh_Texture* Refresh_CreateTexture2D( +REFRESHAPI Refresh_Texture* Refresh_CreateTexture( Refresh_Device *device, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags -); - -/* Creates a 3D texture. - * - * format: The pixel format of the texture data. - * width: The width of the texture image. - * height: The height of the texture image. - * depth: The depth of the texture image. - * levelCount: The number of mipmap levels to allocate. - * usageFlags: Specifies how the texture will be used. - * - * Returns an allocated Refresh_Texture* object. Note that the contents of - * the texture are undefined until SetData is called. - */ -REFRESHAPI Refresh_Texture* Refresh_CreateTexture3D( - Refresh_Device *device, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags -); - -/* Creates a texture cube. - * - * format: The pixel format of the texture data. - * size: The length of the cube side. - * levelCount: The number of mipmap levels to allocate. - * usageFlags: Specifies how the texture will be used. - * - * Returns an allocated Refresh_Texture* object. Note that the contents of - * the texture are undefined until SetData is called. - */ -REFRESHAPI Refresh_Texture* Refresh_CreateTextureCube( - Refresh_Device *device, - Refresh_ColorFormat format, - uint32_t size, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags + Refresh_TextureCreateInfo *textureCreateInfo ); /* Creates a color target. diff --git a/src/Refresh.c b/src/Refresh.c index 12234ce..34daabe 100644 --- a/src/Refresh.c +++ b/src/Refresh.c @@ -338,60 +338,14 @@ Refresh_ShaderModule* Refresh_CreateShaderModule( ); } -Refresh_Texture* Refresh_CreateTexture2D( +Refresh_Texture* Refresh_CreateTexture( Refresh_Device *device, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags + Refresh_TextureCreateInfo *textureCreateInfo ) { NULL_RETURN_NULL(device); - return device->CreateTexture2D( + return device->CreateTexture( device->driverData, - format, - width, - height, - levelCount, - usageFlags - ); -} - -Refresh_Texture* Refresh_CreateTexture3D( - Refresh_Device *device, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags -) { - NULL_RETURN_NULL(device); - return device->CreateTexture3D( - device->driverData, - format, - width, - height, - depth, - levelCount, - usageFlags - ); -} - -Refresh_Texture* Refresh_CreateTextureCube( - Refresh_Device *device, - Refresh_ColorFormat format, - uint32_t size, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags -) { - NULL_RETURN_NULL(device); - return device->CreateTextureCube( - device->driverData, - format, - size, - levelCount, - usageFlags + textureCreateInfo ); } diff --git a/src/Refresh_Driver.h b/src/Refresh_Driver.h index 8d579f1..a92f939 100644 --- a/src/Refresh_Driver.h +++ b/src/Refresh_Driver.h @@ -249,31 +249,9 @@ struct Refresh_Device Refresh_ShaderModuleCreateInfo *shaderModuleCreateInfo ); - Refresh_Texture* (*CreateTexture2D)( + Refresh_Texture* (*CreateTexture)( Refresh_Renderer *driverData, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags - ); - - Refresh_Texture* (*CreateTexture3D)( - Refresh_Renderer *driverData, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags - ); - - Refresh_Texture* (*CreateTextureCube)( - Refresh_Renderer *driverData, - Refresh_ColorFormat format, - uint32_t size, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags + Refresh_TextureCreateInfo *textureCreateInfo ); Refresh_ColorTarget* (*CreateColorTarget)( @@ -543,9 +521,7 @@ struct Refresh_Device ASSIGN_DRIVER_FUNC(CreateSampler, name) \ ASSIGN_DRIVER_FUNC(CreateFramebuffer, name) \ ASSIGN_DRIVER_FUNC(CreateShaderModule, name) \ - ASSIGN_DRIVER_FUNC(CreateTexture2D, name) \ - ASSIGN_DRIVER_FUNC(CreateTexture3D, name) \ - ASSIGN_DRIVER_FUNC(CreateTextureCube, name) \ + ASSIGN_DRIVER_FUNC(CreateTexture, name) \ ASSIGN_DRIVER_FUNC(CreateColorTarget, name) \ ASSIGN_DRIVER_FUNC(CreateDepthStencilTarget, name) \ ASSIGN_DRIVER_FUNC(CreateBuffer, name) \ diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index 100f1db..141491d 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -5570,13 +5570,9 @@ static uint8_t VULKAN_INTERNAL_CreateTexture( return 1; } -static Refresh_Texture* VULKAN_CreateTexture2D( +static Refresh_Texture* VULKAN_CreateTexture( Refresh_Renderer *driverData, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags + Refresh_TextureCreateInfo *textureCreateInfo ) { VulkanRenderer *renderer = (VulkanRenderer*) driverData; VulkanTexture *result; @@ -5586,7 +5582,7 @@ static Refresh_Texture* VULKAN_CreateTexture2D( VK_IMAGE_USAGE_TRANSFER_SRC_BIT ); - if (usageFlags & REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT) + if (textureCreateInfo->usageFlags & REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT) { imageUsageFlags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; } @@ -5595,109 +5591,21 @@ static Refresh_Texture* VULKAN_CreateTexture2D( VULKAN_INTERNAL_CreateTexture( renderer, - width, - height, - 1, - 0, + textureCreateInfo->width, + textureCreateInfo->height, + textureCreateInfo->depth, + textureCreateInfo->isCube, VK_SAMPLE_COUNT_1_BIT, - levelCount, - RefreshToVK_SurfaceFormat[format], + textureCreateInfo->levelCount, + RefreshToVK_SurfaceFormat[textureCreateInfo->format], VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_TYPE_2D, imageUsageFlags, - usageFlags, + textureCreateInfo->usageFlags, result ); - result->colorFormat = format; - - return (Refresh_Texture*) result; -} - -static Refresh_Texture* VULKAN_CreateTexture3D( - Refresh_Renderer *driverData, - Refresh_ColorFormat format, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags -) { - VulkanRenderer *renderer = (VulkanRenderer*) driverData; - VulkanTexture *result; - VkImageUsageFlags imageUsageFlags = ( - VK_IMAGE_USAGE_SAMPLED_BIT | - VK_IMAGE_USAGE_TRANSFER_DST_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT - ); - - if (usageFlags & REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT) - { - imageUsageFlags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - } - - result = (VulkanTexture*) SDL_malloc(sizeof(VulkanTexture)); - - VULKAN_INTERNAL_CreateTexture( - renderer, - width, - height, - depth, - 0, - VK_SAMPLE_COUNT_1_BIT, - levelCount, - RefreshToVK_SurfaceFormat[format], - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_TILING_OPTIMAL, - VK_IMAGE_TYPE_3D, - imageUsageFlags, - usageFlags, - result - ); - result->colorFormat = format; - - return (Refresh_Texture*) result; -} - -static Refresh_Texture* VULKAN_CreateTextureCube( - Refresh_Renderer *driverData, - Refresh_ColorFormat format, - uint32_t size, - uint32_t levelCount, - Refresh_TextureUsageFlags usageFlags -) { - VulkanRenderer *renderer = (VulkanRenderer*) driverData; - VulkanTexture *result; - VkImageUsageFlags imageUsageFlags = ( - VK_IMAGE_USAGE_SAMPLED_BIT | - VK_IMAGE_USAGE_TRANSFER_DST_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT - ); - - if (usageFlags & REFRESH_TEXTUREUSAGE_COLOR_TARGET_BIT) - { - imageUsageFlags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - } - - result = (VulkanTexture*) SDL_malloc(sizeof(VulkanTexture)); - - VULKAN_INTERNAL_CreateTexture( - renderer, - size, - size, - 1, - 1, - VK_SAMPLE_COUNT_1_BIT, - levelCount, - RefreshToVK_SurfaceFormat[format], - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_TILING_OPTIMAL, - VK_IMAGE_TYPE_2D, - imageUsageFlags, - usageFlags, - result - ); - result->colorFormat = format; + result->colorFormat = textureCreateInfo->format; return (Refresh_Texture*) result; }