Commit 1e3e22ef authored by Tim Rowley's avatar Tim Rowley

swr: [rasterizer core] remove utility dead code

Reviewed-by: Bruce Cherniak's avatarBruce Cherniak <bruce.cherniak@intel.com>
parent dc34479b
......@@ -90,7 +90,6 @@ CORE_CXX_SOURCES := \
rasterizer/core/threads.h \
rasterizer/core/tilemgr.cpp \
rasterizer/core/tilemgr.h \
rasterizer/core/utils.cpp \
rasterizer/core/utils.h
JITTER_CXX_SOURCES := \
......
/****************************************************************************
* Copyright (C) 2014-2015 Intel Corporation. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* @file utils.cpp
*
* @brief Utilities used by SWR core.
*
******************************************************************************/
#if defined(_WIN32)
#if defined(NOMINMAX)
// GDI Plus requires non-std min / max macros be defined :(
#undef NOMINMAX
#endif
#include<Windows.h>
#include <Gdiplus.h>
#include <Gdiplusheaders.h>
#include <cstdint>
using namespace Gdiplus;
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
uint32_t num = 0; // number of image encoders
uint32_t size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = nullptr;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == nullptr)
return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(uint32_t j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
void SaveImageToPNGFile(
const WCHAR *pFilename,
void *pBuffer,
uint32_t width,
uint32_t height,
bool broadcastRed = false)
{
// dump pixels to a png
// Initialize GDI+.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr);
Bitmap *bitmap = new Bitmap(width, height);
BYTE *pBytes = (BYTE*)pBuffer;
const uint32_t bytesPerPixel = (broadcastRed ? 1 : 4);
for (uint32_t y = 0; y < height; ++y)
for (uint32_t x = 0; x < width; ++x)
{
uint32_t pixel = 0;
if (broadcastRed)
{
pixel = *(uint8_t*)pBytes;
pixel = pixel | (pixel << 8) | (pixel << 16) | 0xFF000000;
}
else
{
pixel = *(uint32_t*)pBytes;
if (pixel == 0xcdcdcdcd)
{
pixel = 0xFFFF00FF;
}
else if (pixel == 0xdddddddd)
{
pixel = 0x80FF0000;
}
else
{
pixel |= 0xFF000000;
}
}
Color color(pixel);
bitmap->SetPixel(x, y, color);
pBytes += bytesPerPixel;
}
// Save image.
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bitmap->Save(pFilename, &pngClsid, nullptr);
delete bitmap;
GdiplusShutdown(gdiplusToken);
}
void OpenBitmapFromFile(
const WCHAR *pFilename,
void **pBuffer,
uint32_t *width,
uint32_t *height)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr);
Bitmap *bitmap = new Bitmap(pFilename);
*width = bitmap->GetWidth();
*height = bitmap->GetHeight();
*pBuffer = new BYTE[*width * *height * 4]; // width * height * |RGBA|
// The folder 'stb_image' contains a PNG open/close module which
// is far less painful than this is, yo.
Gdiplus::Color clr;
for (uint32_t y = 0, idx = 0; y < *height; ++y)
{
for (uint32_t x = 0; x < *width; ++x, idx += 4)
{
bitmap->GetPixel(x, *height - y - 1, &clr);
((BYTE*)*pBuffer)[idx + 0] = clr.GetBlue();
((BYTE*)*pBuffer)[idx + 1] = clr.GetGreen();
((BYTE*)*pBuffer)[idx + 2] = clr.GetRed();
((BYTE*)*pBuffer)[idx + 3] = clr.GetAlpha();
}
}
delete bitmap;
bitmap = 0;
}
#endif
......@@ -33,21 +33,6 @@
#include "common/simdintrin.h"
#include "common/swr_assert.h"
#if defined(_WIN32)
void SaveImageToPNGFile(
const WCHAR *pFilename,
void *pBuffer,
uint32_t width,
uint32_t height,
bool broadcastRed);
void OpenBitmapFromFile(
const WCHAR *pFilename,
void **pBuffer,
uint32_t *width,
uint32_t *height);
#endif
#if defined(_WIN64) || defined(__x86_64__)
#define _MM_INSERT_EPI64 _mm_insert_epi64
#define _MM_EXTRACT_EPI64 _mm_extract_epi64
......@@ -866,81 +851,4 @@ struct TemplateArgUnroller
}
};
//////////////////////////////////////////////////////////////////////////
/// Helpers used to get / set environment variable
//////////////////////////////////////////////////////////////////////////
static INLINE std::string GetEnv(const std::string& variableName)
{
std::string output;
#if defined(_WIN32)
DWORD valueSize = GetEnvironmentVariableA(variableName.c_str(), nullptr, 0);
if (!valueSize) return output;
output.resize(valueSize - 1); // valueSize includes null, output.resize() does not
GetEnvironmentVariableA(variableName.c_str(), &output[0], valueSize);
#else
output = getenv(variableName.c_str());
#endif
return output;
}
static INLINE void SetEnv(const std::string& variableName, const std::string& value)
{
#if defined(_WIN32)
SetEnvironmentVariableA(variableName.c_str(), value.c_str());
#else
setenv(variableName.c_str(), value.c_str(), true);
#endif
}
//////////////////////////////////////////////////////////////////////////
/// Abstraction for dynamically loading modules and getting functions
//////////////////////////////////////////////////////////////////////////
#if defined(_WIN32)
typedef HMODULE SWR_MODULE_HANDLE;
#else
#include <dlfcn.h>
typedef void* SWR_MODULE_HANDLE;
#endif
static inline SWR_MODULE_HANDLE SWR_API LoadModule(const char* szModuleName)
{
#if defined(_WIN32)
return LoadLibraryA(szModuleName);
#else
return dlopen(szModuleName, RTLD_LAZY | RTLD_LOCAL);
#endif
}
static inline void SWR_API FreeModuleHandle(SWR_MODULE_HANDLE hModule)
{
if (hModule)
{
#if defined(_WIN32)
FreeLibrary((HMODULE)hModule);
#else
dlclose(hModule);
#endif
}
}
static inline void* SWR_API GetProcFromModule(SWR_MODULE_HANDLE hModule, const char* szProcName)
{
if (hModule && szProcName)
{
#if defined(_WIN32)
return GetProcAddress((HMODULE)hModule, szProcName);
#else
return dlsym(hModule, szProcName);
#endif
}
return nullptr;
}
template<typename T>
static inline void GetProcFromModule(SWR_MODULE_HANDLE hModule, const char* szProcName, T& outFunc)
{
outFunc = (T)GetProcFromModule(hModule, szProcName);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment