X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Fdali-toolkit-test-utils%2Ftest-graphics-texture.cpp;h=4950bbd2d4d536bd5d2fd6885dbd982f73e7a5c3;hb=HEAD;hp=adeeeca6f7b10084642e332b05d2166fe712bc09;hpb=416fe5a5deeb51844089bfc9d6055e8852909f97;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp index adeeeca..4950bbd 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ #include "test-graphics-texture.h" +#include #include #include @@ -183,6 +184,7 @@ bool IsCompressedFormat(Graphics::Format pixelFormat) case Graphics::Format::R64G64B64A64_SINT: case Graphics::Format::R64G64B64A64_SFLOAT: case Graphics::Format::B10G11R11_UFLOAT_PACK32: + case Graphics::Format::R11G11B10_UFLOAT_PACK32: case Graphics::Format::E5B9G9R9_UFLOAT_PACK32: case Graphics::Format::D16_UNORM: case Graphics::Format::X8_D24_UNORM_PACK32: @@ -618,6 +620,12 @@ void PixelFormatToGl(Graphics::Format pixelFormat, GLenum& glFormat, GLint& glIn glFormat = 0; break; } + case Graphics::Format::R11G11B10_UFLOAT_PACK32: + { + glFormat = GL_RGB; + pixelDataType = GL_FLOAT; + break; + } case Graphics::Format::R4G4_UNORM_PACK8: case Graphics::Format::A1R5G5B5_UNORM_PACK16: @@ -768,6 +776,7 @@ void PixelFormatToGl(Graphics::Format pixelFormat, GLenum& glFormat, GLint& glIn { case Graphics::Format::R16G16B16A16_SFLOAT: case Graphics::Format::R32G32B32A32_SFLOAT: + case Graphics::Format::R11G11B10_UFLOAT_PACK32: { glInternalFormat = GL_R11F_G11F_B10F; break; @@ -908,22 +917,6 @@ void TestGraphicsTexture::Prepare() { if(mCreateInfo.nativeImagePtr) { - /*********************************************************************************** - * If the native image source changes, we need to re-create the texture. * - * In EGL, this is done in native image implementation in PrepareTexture below. * - * * - * In Vulkan impl, this was done in dali-core side. I think we should make this * - * work in the graphics implementation instead. * - ***********************************************************************************/ - if(mCreateInfo.nativeImagePtr->SourceChanged()) - { - uint32_t width = mCreateInfo.nativeImagePtr->GetWidth(); - uint32_t height = mCreateInfo.nativeImagePtr->GetHeight(); - mCreateInfo.SetSize({width, height}); // Size may change - - // @todo Re-initialize this texture from the new create info. - } - // Ensure the native image is up-to-date mCreateInfo.nativeImagePtr->PrepareTexture(); } @@ -943,26 +936,74 @@ void TestGraphicsTexture::Update(Graphics::TextureUpdateInfo updateInfo, Graphic updateInfo.srcExtent2D.width != (mCreateInfo.size.width / (1 << updateInfo.level)) || updateInfo.srcExtent2D.height != (mCreateInfo.size.height / (1 << updateInfo.level))); + uint8_t* pixels = nullptr; + bool releasePixels = false; + + switch(source.sourceType) + { + case Graphics::TextureUpdateSourceInfo::Type::PIXEL_DATA: + { + auto pixelDataBuffer = Dali::Integration::GetPixelDataBuffer(source.pixelDataSource.pixelData); + + pixels = pixelDataBuffer.buffer; + releasePixels = Dali::Integration::IsPixelDataReleaseAfterUpload(source.pixelDataSource.pixelData) && updateInfo.srcOffset == 0u; + break; + } + case Graphics::TextureUpdateSourceInfo::Type::MEMORY: + { + pixels = reinterpret_cast(source.memorySource.memory); + releasePixels = true; + break; + } + default: + { + // TODO : Implement here + break; + } + } + if(!isSubImage) { if(!mIsCompressed) { - mGlAbstraction.TexImage2D(target, updateInfo.level, mGlInternalFormat, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, 0, mGlFormat, mPixelDataType, source.memorySource.memory); + mGlAbstraction.TexImage2D(target, updateInfo.level, mGlInternalFormat, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, 0, mGlFormat, mPixelDataType, pixels); } else { - mGlAbstraction.CompressedTexImage2D(target, updateInfo.level, mGlInternalFormat, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, 0, updateInfo.srcSize, source.memorySource.memory); + mGlAbstraction.CompressedTexImage2D(target, updateInfo.level, mGlInternalFormat, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, 0, updateInfo.srcSize, pixels); } } else { if(!mIsCompressed) { - mGlAbstraction.TexSubImage2D(target, updateInfo.level, updateInfo.dstOffset2D.x, updateInfo.dstOffset2D.y, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, mGlFormat, mPixelDataType, source.memorySource.memory); + mGlAbstraction.TexSubImage2D(target, updateInfo.level, updateInfo.dstOffset2D.x, updateInfo.dstOffset2D.y, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, mGlFormat, mPixelDataType, pixels); } else { - mGlAbstraction.CompressedTexSubImage2D(target, updateInfo.level, updateInfo.dstOffset2D.x, updateInfo.dstOffset2D.y, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, mGlFormat, updateInfo.srcSize, source.memorySource.memory); + mGlAbstraction.CompressedTexSubImage2D(target, updateInfo.level, updateInfo.dstOffset2D.x, updateInfo.dstOffset2D.y, updateInfo.srcExtent2D.width, updateInfo.srcExtent2D.height, mGlFormat, updateInfo.srcSize, pixels); + } + } + + if(releasePixels && pixels != nullptr) + { + switch(source.sourceType) + { + case Graphics::TextureUpdateSourceInfo::Type::PIXEL_DATA: + { + Dali::Integration::ReleasePixelDataBuffer(source.pixelDataSource.pixelData); + break; + } + case Graphics::TextureUpdateSourceInfo::Type::MEMORY: + { + free(reinterpret_cast(pixels)); + break; + } + default: + { + // TODO : Implement here + break; + } } } }