X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Ftexture_backend.cpp;h=dd19c63664b88658fe06917798742bbcbb4fd2f5;hb=7b0a38db12c3d1aacb59520a3f4baa16d9ec0048;hp=168d6adb0501d69a501b83e8bb726a860fd8e978;hpb=3abde92c3780568c792169e48741f6c5699aa0e7;p=libs%2Fgl.git diff --git a/source/backends/vulkan/texture_backend.cpp b/source/backends/vulkan/texture_backend.cpp index 168d6adb..dd19c636 100644 --- a/source/backends/vulkan/texture_backend.cpp +++ b/source/backends/vulkan/texture_backend.cpp @@ -100,6 +100,43 @@ void VulkanTexture::allocate() set_vulkan_object_names(); } +void VulkanTexture::stage_pixels(void *staging, const void *data, size_t count) +{ + const Texture &self = *static_cast(this); + + if(self.swizzle==RGBA_TO_RGB) + { + const uint32_t *src = static_cast(data); + uint32_t *dst = static_cast(staging); + size_t i = 0; + for(; i+3>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(src); + for(; i(data); + size_t data_size = count*get_pixel_size(self.storage_fmt); + copy(src, src+data_size, static_cast(staging)); + } +} + void VulkanTexture::generate_mipmap_levels(unsigned n_levels) { TransferQueue &tq = device.get_transfer_queue();