DirectXTex updated with DDS_FLAGS_ALLOW_LARGE_FILES (#188)
This commit is contained in:
parent
81ab7997ec
commit
d980fb6576
@ -172,6 +172,8 @@ namespace DirectX
|
|||||||
DDS_FLAGS_FORCE_DX9_LEGACY = 0x40000,
|
DDS_FLAGS_FORCE_DX9_LEGACY = 0x40000,
|
||||||
// Force use of legacy header for DDS writer (will fail if unable to write as such)
|
// Force use of legacy header for DDS writer (will fail if unable to write as such)
|
||||||
|
|
||||||
|
DDS_FLAGS_ALLOW_LARGE_FILES = 0x1000000,
|
||||||
|
// Enables the loader to read large dimension .dds files (i.e. greater than known hardware requirements)
|
||||||
};
|
};
|
||||||
|
|
||||||
enum WIC_FLAGS : unsigned long
|
enum WIC_FLAGS : unsigned long
|
||||||
|
@ -525,6 +525,25 @@ namespace
|
|||||||
metadata.SetAlphaMode(TEX_ALPHA_MODE_PREMULTIPLIED);
|
metadata.SetAlphaMode(TEX_ALPHA_MODE_PREMULTIPLIED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for .dds files that exceed known hardware support
|
||||||
|
if (!(flags & DDS_FLAGS_ALLOW_LARGE_FILES))
|
||||||
|
{
|
||||||
|
// 16k is the maximum required resource size supported by Direct3D
|
||||||
|
if (metadata.width > 16384u /* D3D12_REQ_TEXTURE1D_U_DIMENSION, D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION */
|
||||||
|
|| metadata.height > 16384u /* D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION */
|
||||||
|
|| metadata.mipLevels > 15u /* D3D12_REQ_MIP_LEVELS */)
|
||||||
|
{
|
||||||
|
return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2048 is the maximum required depth/array size supported by Direct3D
|
||||||
|
if (metadata.arraySize > 2048u /* D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION, D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION */
|
||||||
|
|| metadata.depth > 2048u /* D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION */)
|
||||||
|
{
|
||||||
|
return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1068,7 +1068,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
|||||||
case CMD_V_STRIP:
|
case CMD_V_STRIP:
|
||||||
if (_wcsicmp(ext, L".dds") == 0)
|
if (_wcsicmp(ext, L".dds") == 0)
|
||||||
{
|
{
|
||||||
hr = LoadFromDDSFile(pConv->szSrc, DDS_FLAGS_NONE, &info, *image);
|
hr = LoadFromDDSFile(pConv->szSrc, DDS_FLAGS_ALLOW_LARGE_FILES, &info, *image);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
wprintf(L" FAILED (%x)\n", static_cast<unsigned int>(hr));
|
wprintf(L" FAILED (%x)\n", static_cast<unsigned int>(hr));
|
||||||
@ -1095,7 +1095,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
|||||||
case CMD_ARRAY_STRIP:
|
case CMD_ARRAY_STRIP:
|
||||||
if (_wcsicmp(ext, L".dds") == 0)
|
if (_wcsicmp(ext, L".dds") == 0)
|
||||||
{
|
{
|
||||||
hr = LoadFromDDSFile(pConv->szSrc, DDS_FLAGS_NONE, &info, *image);
|
hr = LoadFromDDSFile(pConv->szSrc, DDS_FLAGS_ALLOW_LARGE_FILES, &info, *image);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
wprintf(L" FAILED (%x)\n", static_cast<unsigned int>(hr));
|
wprintf(L" FAILED (%x)\n", static_cast<unsigned int>(hr));
|
||||||
@ -1118,7 +1118,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
|||||||
default:
|
default:
|
||||||
if (_wcsicmp(ext, L".dds") == 0)
|
if (_wcsicmp(ext, L".dds") == 0)
|
||||||
{
|
{
|
||||||
hr = LoadFromDDSFile(pConv->szSrc, DDS_FLAGS_NONE, &info, *image);
|
hr = LoadFromDDSFile(pConv->szSrc, DDS_FLAGS_ALLOW_LARGE_FILES, &info, *image);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
wprintf(L" FAILED (%x)\n", static_cast<unsigned int>(hr));
|
wprintf(L" FAILED (%x)\n", static_cast<unsigned int>(hr));
|
||||||
|
@ -1672,7 +1672,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
|||||||
|
|
||||||
if (_wcsicmp(ext, L".dds") == 0)
|
if (_wcsicmp(ext, L".dds") == 0)
|
||||||
{
|
{
|
||||||
DDS_FLAGS ddsFlags = DDS_FLAGS_NONE;
|
DDS_FLAGS ddsFlags = DDS_FLAGS_ALLOW_LARGE_FILES;
|
||||||
if (dwOptions & (DWORD64(1) << OPT_DDS_DWORD_ALIGN))
|
if (dwOptions & (DWORD64(1) << OPT_DDS_DWORD_ALIGN))
|
||||||
ddsFlags |= DDS_FLAGS_LEGACY_DWORD;
|
ddsFlags |= DDS_FLAGS_LEGACY_DWORD;
|
||||||
if (dwOptions & (DWORD64(1) << OPT_EXPAND_LUMINANCE))
|
if (dwOptions & (DWORD64(1) << OPT_EXPAND_LUMINANCE))
|
||||||
|
@ -592,7 +592,7 @@ namespace
|
|||||||
|
|
||||||
if (_wcsicmp(ext, L".dds") == 0)
|
if (_wcsicmp(ext, L".dds") == 0)
|
||||||
{
|
{
|
||||||
DDS_FLAGS ddsFlags = DDS_FLAGS_NONE;
|
DDS_FLAGS ddsFlags = DDS_FLAGS_ALLOW_LARGE_FILES;
|
||||||
if (dwOptions & (1 << OPT_DDS_DWORD_ALIGN))
|
if (dwOptions & (1 << OPT_DDS_DWORD_ALIGN))
|
||||||
ddsFlags |= DDS_FLAGS_LEGACY_DWORD;
|
ddsFlags |= DDS_FLAGS_LEGACY_DWORD;
|
||||||
if (dwOptions & (1 << OPT_EXPAND_LUMINANCE))
|
if (dwOptions & (1 << OPT_EXPAND_LUMINANCE))
|
||||||
|
Loading…
Reference in New Issue
Block a user