]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/texture_backend.cpp
Add a wrapper class for recording Vulkan commands
[libs/gl.git] / source / backends / vulkan / texture_backend.cpp
index 217299bf26d2ffe878572b03b2a57d752f757bf5..5b73749884892aad06f69589648e4bad16b663aa 100644 (file)
@@ -134,43 +134,6 @@ void VulkanTexture::create_mip_views() const
        }
 }
 
-void VulkanTexture::stage_pixels(void *staging, const void *data, size_t count)
-{
-       const Texture &self = *static_cast<const Texture *>(this);
-
-       if(self.swizzle==RGBA_TO_RGB)
-       {
-               const uint32_t *src = static_cast<const uint32_t *>(data);
-               uint32_t *dst = static_cast<uint32_t *>(staging);
-               size_t i = 0;
-               for(; i+3<count; i+=4)
-               {
-                       dst[0] = src[0]|0xFF000000;
-                       dst[1] = (src[0]>>24)|(src[1]<<8)|0xFF000000;
-                       dst[2] = (src[1]>>16)|(src[2]<<16)|0xFF000000;
-                       dst[3] = (src[2]>>8)|0xFF000000;
-                       src += 3;
-                       dst += 4;
-               }
-
-               if(i<count)
-               {
-                       const uint8_t *src_bytes = reinterpret_cast<const uint8_t *>(src);
-                       for(; i<count; ++i)
-                       {
-                               *dst++ = src_bytes[0]|(src_bytes[1]<<8)|(src_bytes[2]<<16)|0xFF000000;
-                               src_bytes += 3;
-                       }
-               }
-       }
-       else
-       {
-               const char *src = static_cast<const char *>(data);
-               size_t data_size = count*get_pixel_size(self.storage_fmt);
-               copy(src, src+data_size, static_cast<char *>(staging));
-       }
-}
-
 void VulkanTexture::generate_mipmap()
 {
        unsigned n_levels = static_cast<const Texture *>(this)->n_levels;
@@ -183,11 +146,11 @@ void VulkanTexture::generate_mipmap()
                                change_layout(i, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, false);
                                change_layout(i+1, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, true);
                        },
-                       [this, i](VkCommandBuffer cmd_buf, VkBuffer, size_t){
-                               const VulkanFunctions &vk = device.get_functions();
+                       [this, i](const VulkanCommandRecorder &vkCmd, VkBuffer, size_t){
+                               const Texture &self = *static_cast<const Texture *>(this);
 
                                VkImageBlit region = { };
-                               region.srcSubresource.aspectMask = get_vulkan_aspect(get_components(static_cast<const Texture *>(this)->storage_fmt));
+                               region.srcSubresource.aspectMask = get_vulkan_aspect(get_components(self.storage_fmt));
                                region.srcSubresource.mipLevel = i;
                                region.srcSubresource.baseArrayLayer = 0;
                                region.srcSubresource.layerCount = 1;
@@ -196,7 +159,7 @@ void VulkanTexture::generate_mipmap()
 
                                fill_mipmap_blit(i, &region);
 
-                               vk.CmdBlitImage(cmd_buf, handle, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+                               vkCmd.BlitImage(handle, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
                                        1, &region, VK_FILTER_LINEAR);
                        });
        }