mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-10-23 04:21:09 +00:00
Refactor BGRA formats to not be special (so allow any BGRA format)
* Also add ASTC and D16S8 types while in the neighbourhood
This commit is contained in:
1 parent
7ef19b8ae1
commit
8b7a025853
20 files changed
+512
-309
No files matched your search
@@ -42,6 +42,7 @@ struct MeshFormat
|
||||
uint32_t compCount;
|
||||
uint32_t compByteWidth;
|
||||
FormatComponentType compType;
|
||||
bool32 bgraOrder;
|
||||
SpecialFormat specialFormat;
|
||||
|
||||
bool showAlpha;
|
||||
|
||||
@@ -43,6 +43,7 @@ struct ResourceFormat
|
||||
compCount = compByteWidth = 0;
|
||||
compType = eCompType_Float;
|
||||
|
||||
bgraOrder = false;
|
||||
srgbCorrected = false;
|
||||
}
|
||||
|
||||
@@ -54,6 +55,7 @@ struct ResourceFormat
|
||||
return compCount == r.compCount &&
|
||||
compByteWidth == r.compByteWidth &&
|
||||
compType == r.compType &&
|
||||
bgraOrder == r.bgraOrder &&
|
||||
srgbCorrected == r.srgbCorrected;
|
||||
}
|
||||
|
||||
@@ -75,6 +77,7 @@ struct ResourceFormat
|
||||
uint32_t compByteWidth;
|
||||
FormatComponentType compType;
|
||||
|
||||
bool32 bgraOrder;
|
||||
bool32 srgbCorrected;
|
||||
};
|
||||
|
||||
|
||||
@@ -170,13 +170,14 @@ enum SpecialFormat
|
||||
eSpecial_BC7,
|
||||
eSpecial_ETC2,
|
||||
eSpecial_EAC,
|
||||
eSpecial_ASTC,
|
||||
eSpecial_R10G10B10A2,
|
||||
eSpecial_R11G11B10,
|
||||
eSpecial_B5G6R5,
|
||||
eSpecial_B5G5R5A1,
|
||||
eSpecial_R5G6B5,
|
||||
eSpecial_R5G5B5A1,
|
||||
eSpecial_R9G9B9E5,
|
||||
eSpecial_B8G8R8A8,
|
||||
eSpecial_B4G4R4A4,
|
||||
eSpecial_R4G4B4A4,
|
||||
eSpecial_D16S8,
|
||||
eSpecial_D24S8,
|
||||
eSpecial_D32S8,
|
||||
eSpecial_S8,
|
||||
|
||||
@@ -287,25 +287,23 @@ ResourceFormat DXGIFormat2ResourceFormat(DXGI_FORMAT format)
|
||||
special.specialFormat = eSpecial_R10G10B10A2;
|
||||
special.compType = (format == DXGI_FORMAT_R10G10B10A2_UNORM ? eCompType_UNorm : eCompType_UInt);
|
||||
return special;
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
special.specialFormat = eSpecial_B8G8R8A8;
|
||||
special.srgbCorrected = (format == DXGI_FORMAT_B8G8R8A8_UNORM_SRGB ? true : false);
|
||||
return special;
|
||||
case DXGI_FORMAT_R11G11B10_FLOAT:
|
||||
special.specialFormat = eSpecial_R11G11B10;
|
||||
return special;
|
||||
case DXGI_FORMAT_B5G6R5_UNORM:
|
||||
special.specialFormat = eSpecial_B5G6R5;
|
||||
fmt8.bgraOrder = true;
|
||||
special.specialFormat = eSpecial_R5G6B5;
|
||||
return special;
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
special.specialFormat = eSpecial_B5G5R5A1;
|
||||
fmt8.bgraOrder = true;
|
||||
special.specialFormat = eSpecial_R5G5B5A1;
|
||||
return special;
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
special.specialFormat = eSpecial_R9G9B9E5;
|
||||
return special;
|
||||
case DXGI_FORMAT_B4G4R4A4_UNORM:
|
||||
special.specialFormat = eSpecial_B4G4R4A4;
|
||||
fmt8.bgraOrder = true;
|
||||
special.specialFormat = eSpecial_R4G4B4A4;
|
||||
return special;
|
||||
case DXGI_FORMAT_D24_UNORM_S8_UINT:
|
||||
special.specialFormat = eSpecial_D24S8;
|
||||
@@ -434,6 +432,13 @@ ResourceFormat DXGIFormat2ResourceFormat(DXGI_FORMAT format)
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
fmt8.compCount = 4;
|
||||
return fmt8;
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
fmt8.compType = eCompType_UNorm;
|
||||
fmt8.compCount = 4;
|
||||
fmt8.bgraOrder = true;
|
||||
fmt8.srgbCorrected = (format == DXGI_FORMAT_B8G8R8A8_UNORM_SRGB ? true : false);
|
||||
return fmt8;
|
||||
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
fmt8.compType = eCompType_UInt;
|
||||
@@ -494,15 +499,16 @@ DXGI_FORMAT ResourceFormat2DXGIFormat(ResourceFormat format)
|
||||
return format.compType == eCompType_UNorm ? DXGI_FORMAT_R10G10B10A2_UNORM : DXGI_FORMAT_R10G10B10A2_UINT;
|
||||
case eSpecial_R11G11B10:
|
||||
return DXGI_FORMAT_R11G11B10_FLOAT;
|
||||
case eSpecial_B5G6R5:
|
||||
case eSpecial_R5G6B5:
|
||||
RDCASSERT(format.bgraOrder);
|
||||
return DXGI_FORMAT_B5G6R5_UNORM;
|
||||
case eSpecial_B5G5R5A1:
|
||||
case eSpecial_R5G5B5A1:
|
||||
RDCASSERT(format.bgraOrder);
|
||||
return DXGI_FORMAT_B5G5R5A1_UNORM;
|
||||
case eSpecial_R9G9B9E5:
|
||||
return DXGI_FORMAT_R9G9B9E5_SHAREDEXP;
|
||||
case eSpecial_B8G8R8A8:
|
||||
return format.srgbCorrected ? DXGI_FORMAT_B8G8R8A8_UNORM_SRGB : DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
case eSpecial_B4G4R4A4:
|
||||
case eSpecial_R4G4B4A4:
|
||||
RDCASSERT(format.bgraOrder);
|
||||
return DXGI_FORMAT_B4G4R4A4_UNORM;
|
||||
case eSpecial_D24S8:
|
||||
return DXGI_FORMAT_D24_UNORM_S8_UINT;
|
||||
@@ -511,8 +517,10 @@ DXGI_FORMAT ResourceFormat2DXGIFormat(ResourceFormat format)
|
||||
case eSpecial_S8:
|
||||
return DXGI_FORMAT_R8_UINT;
|
||||
default:
|
||||
case eSpecial_D16S8:
|
||||
case eSpecial_ETC2:
|
||||
case eSpecial_EAC:
|
||||
case eSpecial_ASTC:
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Unsupported writing format %u", format.specialFormat);
|
||||
return DXGI_FORMAT_UNKNOWN;
|
||||
@@ -549,8 +557,17 @@ DXGI_FORMAT ResourceFormat2DXGIFormat(ResourceFormat format)
|
||||
case eCompType_SInt: return DXGI_FORMAT_R8G8B8A8_SINT;
|
||||
case eCompType_SNorm: return DXGI_FORMAT_R8G8B8A8_SNORM;
|
||||
default:
|
||||
case eCompType_UNorm: if(format.srgbCorrected) return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||
else return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
case eCompType_UNorm:
|
||||
if(format.srgbCorrected)
|
||||
{
|
||||
if(format.bgraOrder) return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||
else return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(format.bgraOrder) return DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
else return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
}
|
||||
}
|
||||
}
|
||||
RDCERR("Unexpected component byte width %u for 4-component type", format.compByteWidth);
|
||||
@@ -687,7 +704,9 @@ bool write_dds_to_file(FILE *f, const dds_data &data)
|
||||
break;
|
||||
case eSpecial_ETC2:
|
||||
case eSpecial_EAC:
|
||||
RDCERR("Unsupported file format, ETC2/EAC");
|
||||
case eSpecial_ASTC:
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Unsupported file format, %u", data.format.specialFormat);
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
@@ -745,19 +764,19 @@ bool write_dds_to_file(FILE *f, const dds_data &data)
|
||||
case eSpecial_R9G9B9E5:
|
||||
case eSpecial_R11G11B10:
|
||||
case eSpecial_D24S8:
|
||||
case eSpecial_B8G8R8A8:
|
||||
bytesPerPixel = 4;
|
||||
break;
|
||||
case eSpecial_B5G6R5:
|
||||
case eSpecial_B5G5R5A1:
|
||||
case eSpecial_B4G4R4A4:
|
||||
case eSpecial_R5G6B5:
|
||||
case eSpecial_R5G5B5A1:
|
||||
case eSpecial_R4G4B4A4:
|
||||
bytesPerPixel = 2;
|
||||
break;
|
||||
case eSpecial_D32S8:
|
||||
bytesPerPixel = 5;
|
||||
break;
|
||||
case eSpecial_D16S8:
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Unsupported file format");
|
||||
RDCERR("Unsupported file format %u", data.format.specialFormat);
|
||||
return false;
|
||||
default:
|
||||
bytesPerPixel = data.format.compCount*data.format.compByteWidth;
|
||||
@@ -1017,19 +1036,19 @@ dds_data load_dds_from_file(FILE *f)
|
||||
case eSpecial_R9G9B9E5:
|
||||
case eSpecial_R11G11B10:
|
||||
case eSpecial_D24S8:
|
||||
case eSpecial_B8G8R8A8:
|
||||
bytesPerPixel = 4;
|
||||
break;
|
||||
case eSpecial_B5G6R5:
|
||||
case eSpecial_B5G5R5A1:
|
||||
case eSpecial_B4G4R4A4:
|
||||
case eSpecial_R5G6B5:
|
||||
case eSpecial_R5G5B5A1:
|
||||
case eSpecial_R4G4B4A4:
|
||||
bytesPerPixel = 2;
|
||||
break;
|
||||
case eSpecial_D32S8:
|
||||
bytesPerPixel = 5;
|
||||
break;
|
||||
case eSpecial_D16S8:
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Unsupported file format, YUV");
|
||||
RDCERR("Unsupported file format %u", ret.format.specialFormat);
|
||||
return error;
|
||||
default:
|
||||
bytesPerPixel = ret.format.compCount*ret.format.compByteWidth;
|
||||
@@ -1052,7 +1071,9 @@ dds_data load_dds_from_file(FILE *f)
|
||||
break;
|
||||
case eSpecial_ETC2:
|
||||
case eSpecial_EAC:
|
||||
RDCERR("Unsupported file format, ETC2/EAC");
|
||||
case eSpecial_ASTC:
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Unsupported file format, %u", ret.format.specialFormat);
|
||||
return error;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -973,8 +973,7 @@ ShaderDebugTrace D3D11DebugManager::DebugVertex(uint32_t frameID, uint32_t event
|
||||
// if there's only e.g. 3 bytes remaining don't read and unpack some of
|
||||
// a 4-byte special format
|
||||
size_t packedsize = 4;
|
||||
if (fmt.specialFormat == eSpecial_B8G8R8A8 || fmt.specialFormat == eSpecial_B5G5R5A1 ||
|
||||
fmt.specialFormat == eSpecial_B5G6R5 || fmt.specialFormat == eSpecial_B4G4R4A4)
|
||||
if (fmt.specialFormat == eSpecial_R5G5B5A1 || fmt.specialFormat == eSpecial_R5G6B5 || fmt.specialFormat == eSpecial_R4G4B4A4)
|
||||
packedsize = 2;
|
||||
|
||||
if(srcData == NULL || packedsize > dataSize)
|
||||
@@ -984,25 +983,21 @@ ShaderDebugTrace D3D11DebugManager::DebugVertex(uint32_t frameID, uint32_t event
|
||||
ret.inputs[i].value.u.z =
|
||||
ret.inputs[i].value.u.w = 0;
|
||||
}
|
||||
else if (fmt.specialFormat == eSpecial_B8G8R8A8)
|
||||
{
|
||||
ret.inputs[i].value.f.x = float(srcData[2])/255.0f;
|
||||
ret.inputs[i].value.f.y = float(srcData[1])/255.0f;
|
||||
ret.inputs[i].value.f.z = float(srcData[0])/255.0f;
|
||||
ret.inputs[i].value.f.w = float(srcData[3])/255.0f;
|
||||
}
|
||||
else if (fmt.specialFormat == eSpecial_B5G5R5A1)
|
||||
else if (fmt.specialFormat == eSpecial_R5G5B5A1)
|
||||
{
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
uint16_t packed = ((uint16_t *)srcData)[0];
|
||||
*v4 = ConvertFromB5G5R5A1(packed);
|
||||
}
|
||||
else if (fmt.specialFormat == eSpecial_B5G6R5)
|
||||
else if (fmt.specialFormat == eSpecial_R5G6B5)
|
||||
{
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
uint16_t packed = ((uint16_t *)srcData)[0];
|
||||
*v3 = ConvertFromB5G6R5(packed);
|
||||
}
|
||||
else if (fmt.specialFormat == eSpecial_B4G4R4A4)
|
||||
else if (fmt.specialFormat == eSpecial_R4G4B4A4)
|
||||
{
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
uint16_t packed = ((uint16_t *)srcData)[0];
|
||||
*v4 = ConvertFromB4G4R4A4(packed);
|
||||
}
|
||||
@@ -1100,6 +1095,12 @@ ShaderDebugTrace D3D11DebugManager::DebugVertex(uint32_t frameID, uint32_t event
|
||||
RDCERR("Unexpected component type");
|
||||
}
|
||||
}
|
||||
|
||||
if(fmt.bgraOrder)
|
||||
{
|
||||
RDCASSERT(fmt.compCount == 4);
|
||||
std::swap(ret.inputs[i].value.fv[2], ret.inputs[i].value.fv[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(dxbc->m_InputSig[i].systemValue == eAttr_VertexIndex)
|
||||
|
||||
@@ -263,20 +263,20 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt)
|
||||
case eSpecial_R11G11B10:
|
||||
ret = DXGI_FORMAT_R11G11B10_FLOAT;
|
||||
break;
|
||||
case eSpecial_B5G6R5:
|
||||
case eSpecial_R5G6B5:
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
ret = DXGI_FORMAT_B5G6R5_UNORM;
|
||||
break;
|
||||
case eSpecial_B5G5R5A1:
|
||||
case eSpecial_R5G5B5A1:
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
ret = DXGI_FORMAT_B5G5R5A1_UNORM;
|
||||
break;
|
||||
case eSpecial_R9G9B9E5:
|
||||
ret = DXGI_FORMAT_R9G9B9E5_SHAREDEXP;
|
||||
break;
|
||||
case eSpecial_B8G8R8A8:
|
||||
ret = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
break;
|
||||
#if defined(INCLUDE_D3D_11_1)
|
||||
case eSpecial_B4G4R4A4:
|
||||
case eSpecial_R4G4B4A4:
|
||||
RDCASSERT(fmt.bgraOrder);
|
||||
ret = DXGI_FORMAT_B4G4R4A4_UNORM;
|
||||
break;
|
||||
#endif
|
||||
@@ -295,8 +295,11 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt)
|
||||
case eSpecial_S8:
|
||||
RDCERR("D3D11 has no stencil-only format");
|
||||
break;
|
||||
case eSpecial_D16S8:
|
||||
RDCERR("D3D11 has no D16S8 format");
|
||||
break;
|
||||
default:
|
||||
RDCERR("Unrecognised special format");
|
||||
RDCERR("Unrecognised/unsupported special format %u", fmt.specialFormat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -306,6 +309,9 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt)
|
||||
else if(fmt.compByteWidth == 2) ret = DXGI_FORMAT_R16G16B16A16_TYPELESS;
|
||||
else if(fmt.compByteWidth == 1) ret = DXGI_FORMAT_R8G8B8A8_TYPELESS;
|
||||
else RDCERR("Unrecognised 4-component byte width: %d", fmt.compByteWidth);
|
||||
|
||||
if(fmt.bgraOrder)
|
||||
ret = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
}
|
||||
else if(fmt.compCount == 3)
|
||||
{
|
||||
@@ -374,68 +380,68 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
ret.compCount = 4;
|
||||
break;
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
ret.compCount = 3;
|
||||
break;
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
ret.compCount = 2;
|
||||
break;
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_A8_UNORM:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_A8_UNORM:
|
||||
ret.compCount = 1;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_R32G8X24_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
|
||||
@@ -450,7 +456,7 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
case DXGI_FORMAT_BC5_SNORM:
|
||||
ret.compCount = 2;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_R11G11B10_FLOAT:
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
case DXGI_FORMAT_R8G8_B8G8_UNORM:
|
||||
@@ -474,7 +480,7 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
|
||||
|
||||
|
||||
case DXGI_FORMAT_BC1_TYPELESS:
|
||||
case DXGI_FORMAT_BC1_UNORM:
|
||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||
@@ -491,7 +497,7 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
break;
|
||||
|
||||
case DXGI_FORMAT_R1_UNORM:
|
||||
|
||||
|
||||
case DXGI_FORMAT_BC4_TYPELESS:
|
||||
case DXGI_FORMAT_BC4_UNORM:
|
||||
case DXGI_FORMAT_BC4_SNORM:
|
||||
@@ -507,63 +513,63 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
ret.compByteWidth = 4;
|
||||
break;
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
ret.compByteWidth = 2;
|
||||
break;
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_A8_UNORM:
|
||||
ret.compByteWidth = 1;
|
||||
break;
|
||||
|
||||
@@ -584,87 +590,87 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32B32_TYPELESS:
|
||||
case DXGI_FORMAT_R32G32_TYPELESS:
|
||||
case DXGI_FORMAT_R32_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
|
||||
case DXGI_FORMAT_R16G16_TYPELESS:
|
||||
case DXGI_FORMAT_R16_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
|
||||
case DXGI_FORMAT_R8G8_TYPELESS:
|
||||
case DXGI_FORMAT_R8_TYPELESS:
|
||||
ret.compType = eCompType_None;
|
||||
break;
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32A32_FLOAT:
|
||||
case DXGI_FORMAT_R32G32B32_FLOAT:
|
||||
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
||||
case DXGI_FORMAT_R32G32_FLOAT:
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R16_FLOAT:
|
||||
ret.compType = eCompType_Float;
|
||||
break;
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_A8_UNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
case DXGI_FORMAT_R8G8_UNORM:
|
||||
case DXGI_FORMAT_R16_UNORM:
|
||||
case DXGI_FORMAT_R8_UNORM:
|
||||
case DXGI_FORMAT_A8_UNORM:
|
||||
ret.compType = eCompType_UNorm;
|
||||
break;
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
case DXGI_FORMAT_R8G8B8A8_SNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_SNORM:
|
||||
case DXGI_FORMAT_R16G16_SNORM:
|
||||
case DXGI_FORMAT_R8G8_SNORM:
|
||||
case DXGI_FORMAT_R16_SNORM:
|
||||
case DXGI_FORMAT_R8_SNORM:
|
||||
ret.compType = eCompType_SNorm;
|
||||
break;
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_UINT:
|
||||
case DXGI_FORMAT_R32G32B32_UINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_UINT:
|
||||
case DXGI_FORMAT_R32G32_UINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_UINT:
|
||||
case DXGI_FORMAT_R16G16_UINT:
|
||||
case DXGI_FORMAT_R32_UINT:
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
case DXGI_FORMAT_R16_UINT:
|
||||
case DXGI_FORMAT_R8_UINT:
|
||||
ret.compType = eCompType_UInt;
|
||||
break;
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
case DXGI_FORMAT_R32G32B32A32_SINT:
|
||||
case DXGI_FORMAT_R32G32B32_SINT:
|
||||
case DXGI_FORMAT_R16G16B16A16_SINT:
|
||||
case DXGI_FORMAT_R32G32_SINT:
|
||||
case DXGI_FORMAT_R8G8B8A8_SINT:
|
||||
case DXGI_FORMAT_R16G16_SINT:
|
||||
case DXGI_FORMAT_R32_SINT:
|
||||
case DXGI_FORMAT_R8G8_SINT:
|
||||
case DXGI_FORMAT_R16_SINT:
|
||||
case DXGI_FORMAT_R8_SINT:
|
||||
ret.compType = eCompType_SInt;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_R10G10B10A2_UINT:
|
||||
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
|
||||
ret.compType = eCompType_UInt;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
case DXGI_FORMAT_R11G11B10_FLOAT:
|
||||
ret.compType = eCompType_Float;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_BC4_SNORM:
|
||||
case DXGI_FORMAT_BC5_SNORM:
|
||||
case DXGI_FORMAT_BC6H_SF16:
|
||||
case DXGI_FORMAT_BC6H_TYPELESS:
|
||||
ret.compType = eCompType_SNorm;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_R24G8_TYPELESS:
|
||||
ret.compType = eCompType_None;
|
||||
break;
|
||||
@@ -672,13 +678,13 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
|
||||
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_D32_FLOAT:
|
||||
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
|
||||
case DXGI_FORMAT_D24_UNORM_S8_UINT:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
case DXGI_FORMAT_D16_UNORM:
|
||||
ret.compType = eCompType_Depth;
|
||||
break;
|
||||
|
||||
|
||||
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
@@ -721,6 +727,18 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
ret.special = true;
|
||||
}
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
}
|
||||
|
||||
ret.specialFormat = eSpecial_Unknown;
|
||||
|
||||
switch(fmt)
|
||||
@@ -783,22 +801,16 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
ret.specialFormat = eSpecial_R11G11B10;
|
||||
break;
|
||||
case DXGI_FORMAT_B5G6R5_UNORM:
|
||||
ret.specialFormat = eSpecial_B5G6R5;
|
||||
ret.specialFormat = eSpecial_R5G6B5;
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
ret.specialFormat = eSpecial_B5G5R5A1;
|
||||
ret.specialFormat = eSpecial_R5G5B5A1;
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
ret.specialFormat = eSpecial_R9G9B9E5;
|
||||
break;
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
ret.specialFormat = eSpecial_B8G8R8A8;
|
||||
break;
|
||||
|
||||
#if defined(INCLUDE_D3D_11_1)
|
||||
case DXGI_FORMAT_AYUV:
|
||||
@@ -820,7 +832,8 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
break;
|
||||
|
||||
case DXGI_FORMAT_B4G4R4A4_UNORM:
|
||||
ret.specialFormat = eSpecial_B4G4R4A4;
|
||||
ret.specialFormat = eSpecial_R4G4B4A4;
|
||||
ret.bgraOrder = true;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -4548,18 +4548,6 @@ FloatVector D3D11DebugManager::InterpretVertex(byte *data, uint32_t vert, MeshDi
|
||||
ret.z = v.z;
|
||||
return ret;
|
||||
}
|
||||
else if(cfg.position.specialFormat == eSpecial_B8G8R8A8)
|
||||
{
|
||||
if(data+4 >= end)
|
||||
{
|
||||
valid = false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
fmt.compByteWidth = 1;
|
||||
fmt.compCount = 4;
|
||||
fmt.compType = eCompType_UNorm;
|
||||
}
|
||||
|
||||
if(data + cfg.position.compCount*cfg.position.compByteWidth > end)
|
||||
{
|
||||
@@ -4575,12 +4563,12 @@ FloatVector D3D11DebugManager::InterpretVertex(byte *data, uint32_t vert, MeshDi
|
||||
out++;
|
||||
}
|
||||
|
||||
if(cfg.position.specialFormat == eSpecial_B8G8R8A8)
|
||||
if(cfg.position.bgraOrder)
|
||||
{
|
||||
FloatVector reversed;
|
||||
reversed.x = ret.x;
|
||||
reversed.x = ret.z;
|
||||
reversed.y = ret.y;
|
||||
reversed.z = ret.z;
|
||||
reversed.z = ret.x;
|
||||
reversed.w = ret.w;
|
||||
return reversed;
|
||||
}
|
||||
|
||||
@@ -2679,18 +2679,13 @@ bool WrappedID3D11Device::EndFrameCapture(void *dev, void *wnd)
|
||||
uint32_t stride = fmt.compByteWidth*fmt.compCount;
|
||||
|
||||
bool buf1010102 = false;
|
||||
bool bufBGRA = false;
|
||||
bool bufBGRA = (fmt.bgraOrder != false);
|
||||
|
||||
if(fmt.special && fmt.specialFormat == eSpecial_R10G10B10A2)
|
||||
{
|
||||
stride = 4;
|
||||
buf1010102 = true;
|
||||
}
|
||||
if(fmt.special && fmt.specialFormat == eSpecial_B8G8R8A8)
|
||||
{
|
||||
stride = 4;
|
||||
bufBGRA = true;
|
||||
}
|
||||
|
||||
byte *dst = thpixels;
|
||||
|
||||
|
||||
@@ -699,9 +699,11 @@ DXGI_FORMAT GetSRGBFormat(DXGI_FORMAT f)
|
||||
return DXGI_FORMAT_BC7_UNORM_SRGB;
|
||||
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
||||
|
||||
default:
|
||||
@@ -785,10 +787,10 @@ DXGI_FORMAT GetUnormTypedFormat(DXGI_FORMAT f)
|
||||
return DXGI_FORMAT_BC5_UNORM;
|
||||
|
||||
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
|
||||
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||
|
||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
||||
return DXGI_FORMAT_B8G8R8X8_UNORM;
|
||||
|
||||
case DXGI_FORMAT_BC6H_TYPELESS:
|
||||
case DXGI_FORMAT_BC6H_SF16:
|
||||
|
||||
@@ -739,6 +739,37 @@ ResourceFormat MakeResourceFormat(WrappedOpenGL &gl, GLenum target, GLenum fmt)
|
||||
case eGL_COMPRESSED_SIGNED_RG11_EAC:
|
||||
ret.specialFormat = eSpecial_EAC;
|
||||
break;
|
||||
// ASTC
|
||||
case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
|
||||
ret.specialFormat = eSpecial_ASTC;
|
||||
break;
|
||||
default:
|
||||
RDCERR("Unexpected compressed format %#x", fmt);
|
||||
break;
|
||||
@@ -937,19 +968,16 @@ GLenum MakeGLFormat(WrappedOpenGL &gl, ResourceFormat fmt)
|
||||
case eSpecial_R11G11B10:
|
||||
ret = eGL_R11F_G11F_B10F;
|
||||
break;
|
||||
case eSpecial_B5G6R5:
|
||||
case eSpecial_R5G6B5:
|
||||
ret = eGL_RGB565;
|
||||
break;
|
||||
case eSpecial_B5G5R5A1:
|
||||
case eSpecial_R5G5B5A1:
|
||||
ret = eGL_RGB5_A1;
|
||||
break;
|
||||
case eSpecial_R9G9B9E5:
|
||||
ret = eGL_RGB9_E5;
|
||||
break;
|
||||
case eSpecial_B8G8R8A8:
|
||||
ret = eGL_RGBA;
|
||||
break;
|
||||
case eSpecial_B4G4R4A4:
|
||||
case eSpecial_R4G4B4A4:
|
||||
ret = eGL_RGBA4;
|
||||
break;
|
||||
case eSpecial_D24S8:
|
||||
@@ -958,6 +986,9 @@ GLenum MakeGLFormat(WrappedOpenGL &gl, ResourceFormat fmt)
|
||||
case eSpecial_D32S8:
|
||||
ret = eGL_DEPTH32F_STENCIL8;
|
||||
break;
|
||||
case eSpecial_ASTC:
|
||||
RDCERR("ASTC can't be decoded unambiguously");
|
||||
break;
|
||||
case eSpecial_S8:
|
||||
ret = eGL_STENCIL_INDEX8;
|
||||
break;
|
||||
@@ -995,6 +1026,9 @@ GLenum MakeGLFormat(WrappedOpenGL &gl, ResourceFormat fmt)
|
||||
else if(fmt.compType == eCompType_SNorm) ret = eGL_RGBA8_SNORM;
|
||||
else if(fmt.compType == eCompType_UNorm) ret = eGL_RGBA8;
|
||||
else RDCERR("Unrecognised component type");
|
||||
|
||||
if(fmt.bgraOrder)
|
||||
ret = eGL_BGRA;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -3360,18 +3360,6 @@ FloatVector GLReplay::InterpretVertex(byte *data, uint32_t vert, MeshDisplay cfg
|
||||
ret.z = v.z;
|
||||
return ret;
|
||||
}
|
||||
else if(cfg.position.specialFormat == eSpecial_B8G8R8A8)
|
||||
{
|
||||
if(data+4 >= end)
|
||||
{
|
||||
valid = false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
fmt.compByteWidth = 1;
|
||||
fmt.compCount = 4;
|
||||
fmt.compType = eCompType_UNorm;
|
||||
}
|
||||
|
||||
if(data + cfg.position.compCount*cfg.position.compByteWidth > end)
|
||||
{
|
||||
@@ -3387,12 +3375,12 @@ FloatVector GLReplay::InterpretVertex(byte *data, uint32_t vert, MeshDisplay cfg
|
||||
out++;
|
||||
}
|
||||
|
||||
if(cfg.position.specialFormat == eSpecial_B8G8R8A8)
|
||||
if(cfg.position.bgraOrder)
|
||||
{
|
||||
FloatVector reversed;
|
||||
reversed.x = ret.x;
|
||||
reversed.x = ret.z;
|
||||
reversed.y = ret.y;
|
||||
reversed.z = ret.z;
|
||||
reversed.z = ret.x;
|
||||
reversed.w = ret.w;
|
||||
return reversed;
|
||||
}
|
||||
|
||||
@@ -947,15 +947,13 @@ void GLReplay::SavePipelineState()
|
||||
|
||||
if(fmt.compCount == eGL_BGRA)
|
||||
{
|
||||
fmt.compByteWidth = 1;
|
||||
fmt.compCount = 4;
|
||||
fmt.special = true;
|
||||
fmt.specialFormat = eSpecial_B8G8R8A8;
|
||||
fmt.bgraOrder = true;
|
||||
fmt.compType = eCompType_UNorm;
|
||||
|
||||
if(type == eGL_UNSIGNED_BYTE)
|
||||
{
|
||||
fmt.specialFormat = eSpecial_B8G8R8A8;
|
||||
fmt.compType = eCompType_UNorm;
|
||||
fmt.strname = "GL_BGRA8";
|
||||
}
|
||||
else if(type == eGL_UNSIGNED_INT_2_10_10_10_REV || type == eGL_INT_2_10_10_10_REV)
|
||||
@@ -968,6 +966,8 @@ void GLReplay::SavePipelineState()
|
||||
{
|
||||
RDCERR("Unexpected BGRA type");
|
||||
}
|
||||
|
||||
// haven't checked the other cases work properly
|
||||
RDCASSERT(type == eGL_UNSIGNED_BYTE);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalfor
|
||||
return GetByteSize(w, h, d, GetBaseFormat(internalformat), GetDataType(internalformat));
|
||||
}
|
||||
|
||||
uint32_t astc[2] = { 0, 0 };
|
||||
|
||||
switch(internalformat)
|
||||
{
|
||||
// BC1
|
||||
@@ -81,10 +83,106 @@ size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalfor
|
||||
case eGL_COMPRESSED_RG11_EAC:
|
||||
case eGL_COMPRESSED_SIGNED_RG11_EAC:
|
||||
return (AlignUp4(w) * AlignUp4(h) * d);
|
||||
case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
|
||||
astc[0] = 4; astc[1] = 4;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
|
||||
astc[0] = 5; astc[1] = 4;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
|
||||
astc[0] = 5; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
|
||||
astc[0] = 6; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
|
||||
astc[0] = 6; astc[1] = 6;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
|
||||
astc[0] = 8; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
|
||||
astc[0] = 8; astc[1] = 6;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
|
||||
astc[0] = 8; astc[1] = 8;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
|
||||
astc[0] = 10; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
|
||||
astc[0] = 10; astc[1] = 6;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
|
||||
astc[0] = 10; astc[1] = 8;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
|
||||
astc[0] = 10; astc[1] = 10;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
|
||||
astc[0] = 12; astc[1] = 10;
|
||||
break;
|
||||
case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
|
||||
astc[0] = 12; astc[1] = 12;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
|
||||
astc[0] = 4; astc[1] = 4;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
|
||||
astc[0] = 5; astc[1] = 4;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
|
||||
astc[0] = 5; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
|
||||
astc[0] = 6; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
|
||||
astc[0] = 6; astc[1] = 6;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
|
||||
astc[0] = 8; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
|
||||
astc[0] = 8; astc[1] = 6;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
|
||||
astc[0] = 8; astc[1] = 8;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
|
||||
astc[0] = 10; astc[1] = 5;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
|
||||
astc[0] = 10; astc[1] = 6;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
|
||||
astc[0] = 10; astc[1] = 8;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
|
||||
astc[0] = 10; astc[1] = 10;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
|
||||
astc[0] = 12; astc[1] = 10;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
|
||||
astc[0] = 12; astc[1] = 12;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(astc[0] > 0 && astc[1] > 0)
|
||||
{
|
||||
uint32_t blocks[2] = { (w / astc[0]), (h / astc[1]) };
|
||||
|
||||
// how many blocks are needed - including any extra partial blocks
|
||||
blocks[0] += (w % astc[0]) ? 1 : 0;
|
||||
blocks[1] += (h % astc[1]) ? 1 : 0;
|
||||
|
||||
// ASTC blocks are all 128 bits each
|
||||
return blocks[0]*blocks[1]*16*d;
|
||||
}
|
||||
|
||||
RDCERR("Unrecognised compressed format");
|
||||
return GetByteSize(w, h, d, GetBaseFormat(internalformat), GetDataType(internalformat));
|
||||
}
|
||||
@@ -686,6 +784,35 @@ bool IsCompressedFormat(GLenum internalFormat)
|
||||
case eGL_COMPRESSED_SIGNED_R11_EAC:
|
||||
case eGL_COMPRESSED_RG11_EAC:
|
||||
case eGL_COMPRESSED_SIGNED_RG11_EAC:
|
||||
// ASTC
|
||||
case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
|
||||
case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
|
||||
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -623,7 +623,8 @@ bool ReplayRenderer::SaveTexture(const TextureSave &saveData, const char *path)
|
||||
|
||||
// we don't support any file formats that handle these block compression formats
|
||||
if(td.format.specialFormat == eSpecial_ETC2 ||
|
||||
td.format.specialFormat == eSpecial_EAC)
|
||||
td.format.specialFormat == eSpecial_EAC ||
|
||||
td.format.specialFormat == eSpecial_ASTC)
|
||||
downcast = true;
|
||||
|
||||
// for DDS don't downcast, for non-HDR always downcast if we're not already RGBA8 unorm
|
||||
@@ -680,19 +681,19 @@ bool ReplayRenderer::SaveTexture(const TextureSave &saveData, const char *path)
|
||||
case eSpecial_R9G9B9E5:
|
||||
case eSpecial_R11G11B10:
|
||||
case eSpecial_D24S8:
|
||||
case eSpecial_B8G8R8A8:
|
||||
bytesPerPixel = 4;
|
||||
break;
|
||||
case eSpecial_B5G6R5:
|
||||
case eSpecial_B5G5R5A1:
|
||||
case eSpecial_B4G4R4A4:
|
||||
case eSpecial_R5G6B5:
|
||||
case eSpecial_R5G5B5A1:
|
||||
case eSpecial_R4G4B4A4:
|
||||
bytesPerPixel = 2;
|
||||
break;
|
||||
case eSpecial_D32S8:
|
||||
bytesPerPixel = 5;
|
||||
break;
|
||||
case eSpecial_D16S8:
|
||||
case eSpecial_YUV:
|
||||
RDCERR("Unsupported file save format");
|
||||
RDCERR("Unsupported file format %u", td.format.specialFormat);
|
||||
return false;
|
||||
default:
|
||||
bytesPerPixel = td.format.compCount*td.format.compByteWidth;
|
||||
|
||||
@@ -109,43 +109,52 @@ namespace renderdocui.Code
|
||||
{
|
||||
var ret = new List<object>();
|
||||
|
||||
if (format.special && format.specialFormat == SpecialFormat.B8G8R8A8)
|
||||
{
|
||||
byte b = read.ReadByte();
|
||||
byte g = read.ReadByte();
|
||||
byte r = read.ReadByte();
|
||||
byte a = read.ReadByte();
|
||||
|
||||
ret.Add((float)r / 255.0f);
|
||||
ret.Add((float)g / 255.0f);
|
||||
ret.Add((float)b / 255.0f);
|
||||
ret.Add((float)a / 255.0f);
|
||||
}
|
||||
else if (format.special && format.specialFormat == SpecialFormat.B5G5R5A1)
|
||||
if (format.special && format.specialFormat == SpecialFormat.R5G5B5A1)
|
||||
{
|
||||
ushort packed = read.ReadUInt16();
|
||||
|
||||
ret.Add((float)((packed >> 10) & 0x1f) / 31.0f);
|
||||
ret.Add((float)((packed >> 0) & 0x1f) / 31.0f);
|
||||
ret.Add((float)((packed >> 5) & 0x1f) / 31.0f);
|
||||
ret.Add((float)((packed >> 0) & 0x1f) / 31.0f);
|
||||
ret.Add((float)((packed >> 10) & 0x1f) / 31.0f);
|
||||
ret.Add(((packed & 0x8000) > 0) ? 1.0f : 0.0f);
|
||||
|
||||
if (format.bgraOrder)
|
||||
{
|
||||
object tmp = ret[2];
|
||||
ret[2] = ret[0];
|
||||
ret[0] = tmp;
|
||||
}
|
||||
}
|
||||
else if (format.special && format.specialFormat == SpecialFormat.B5G6R5)
|
||||
else if (format.special && format.specialFormat == SpecialFormat.R5G6B5)
|
||||
{
|
||||
ushort packed = read.ReadUInt16();
|
||||
|
||||
ret.Add((float)((packed >> 11) & 0x1f) / 31.0f);
|
||||
ret.Add((float)((packed >> 5) & 0x3f) / 63.0f);
|
||||
ret.Add((float)((packed >> 0) & 0x1f) / 31.0f);
|
||||
ret.Add((float)((packed >> 5) & 0x3f) / 63.0f);
|
||||
ret.Add((float)((packed >> 11) & 0x1f) / 31.0f);
|
||||
|
||||
if (format.bgraOrder)
|
||||
{
|
||||
object tmp = ret[2];
|
||||
ret[2] = ret[0];
|
||||
ret[0] = tmp;
|
||||
}
|
||||
}
|
||||
else if (format.special && format.specialFormat == SpecialFormat.B4G4R4A4)
|
||||
else if (format.special && format.specialFormat == SpecialFormat.R4G4B4A4)
|
||||
{
|
||||
ushort packed = read.ReadUInt16();
|
||||
|
||||
ret.Add((float)((packed >> 8) & 0xf) / 15.0f);
|
||||
ret.Add((float)((packed >> 4) & 0xf) / 15.0f);
|
||||
ret.Add((float)((packed >> 0) & 0xf) / 15.0f);
|
||||
ret.Add((float)((packed >> 4) & 0xf) / 15.0f);
|
||||
ret.Add((float)((packed >> 8) & 0xf) / 15.0f);
|
||||
ret.Add((float)((packed >> 12) & 0xf) / 15.0f);
|
||||
|
||||
if (format.bgraOrder)
|
||||
{
|
||||
object tmp = ret[2];
|
||||
ret[2] = ret[0];
|
||||
ret[0] = tmp;
|
||||
}
|
||||
}
|
||||
else if (format.special && format.specialFormat == SpecialFormat.R10G10B10A2)
|
||||
{
|
||||
@@ -256,6 +265,13 @@ namespace renderdocui.Code
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (format.bgraOrder)
|
||||
{
|
||||
object tmp = ret[2];
|
||||
ret[2] = ret[0];
|
||||
ret[0] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return ret.ToArray();
|
||||
|
||||
@@ -172,13 +172,14 @@ namespace renderdoc
|
||||
BC7,
|
||||
ETC2,
|
||||
EAC,
|
||||
ASTC,
|
||||
R10G10B10A2,
|
||||
R11G11B10,
|
||||
B5G6R5,
|
||||
B5G5R5A1,
|
||||
R5G6B5,
|
||||
R5G5B5A1,
|
||||
R9G9B9E5,
|
||||
B8G8R8A8,
|
||||
B4G4R4A4,
|
||||
R4G4B4A4,
|
||||
D16S8,
|
||||
D24S8,
|
||||
D32S8,
|
||||
S8,
|
||||
|
||||
@@ -87,6 +87,7 @@ namespace renderdoc
|
||||
compType = FormatComponentType.None;
|
||||
compCount = 0;
|
||||
compByteWidth = 0;
|
||||
bgraOrder = false;
|
||||
srgbCorrected = false;
|
||||
|
||||
strname = "";
|
||||
@@ -101,6 +102,7 @@ namespace renderdoc
|
||||
compType = type;
|
||||
compCount = count;
|
||||
compByteWidth = byteWidth;
|
||||
bgraOrder = false;
|
||||
srgbCorrected = false;
|
||||
|
||||
strname = "";
|
||||
@@ -120,6 +122,7 @@ namespace renderdoc
|
||||
public UInt32 compByteWidth;
|
||||
public FormatComponentType compType;
|
||||
|
||||
public bool bgraOrder;
|
||||
public bool srgbCorrected;
|
||||
|
||||
public override string ToString()
|
||||
@@ -137,6 +140,7 @@ namespace renderdoc
|
||||
hash = hash * 17 + compCount.GetHashCode();
|
||||
hash = hash * 17 + compByteWidth.GetHashCode();
|
||||
hash = hash * 17 + compType.GetHashCode();
|
||||
hash = hash * 17 + bgraOrder.GetHashCode();
|
||||
hash = hash * 17 + srgbCorrected.GetHashCode();
|
||||
return hash;
|
||||
}
|
||||
@@ -148,6 +152,7 @@ namespace renderdoc
|
||||
return x.compCount == y.compCount &&
|
||||
x.compByteWidth == y.compByteWidth &&
|
||||
x.compType == y.compType &&
|
||||
x.bgraOrder == y.bgraOrder &&
|
||||
x.srgbCorrected == y.srgbCorrected;
|
||||
}
|
||||
public static bool operator !=(ResourceFormat x, ResourceFormat y)
|
||||
@@ -379,6 +384,7 @@ namespace renderdoc
|
||||
public UInt32 compCount;
|
||||
public UInt32 compByteWidth;
|
||||
public FormatComponentType compType;
|
||||
public bool bgraOrder;
|
||||
public SpecialFormat specialFormat;
|
||||
|
||||
public bool showAlpha;
|
||||
|
||||
@@ -2550,6 +2550,7 @@ namespace renderdocui.Windows
|
||||
m_MeshDisplay.position.compCount = pos.format.compCount;
|
||||
m_MeshDisplay.position.compByteWidth = pos.format.compByteWidth;
|
||||
m_MeshDisplay.position.compType = pos.format.compType;
|
||||
m_MeshDisplay.position.bgraOrder = pos.format.bgraOrder;
|
||||
m_MeshDisplay.position.specialFormat = pos.format.special ? pos.format.specialFormat : SpecialFormat.Unknown;
|
||||
|
||||
m_MeshDisplay.position.showAlpha = false;
|
||||
@@ -2622,6 +2623,7 @@ namespace renderdocui.Windows
|
||||
m_MeshDisplay.secondary.compCount = 0;
|
||||
m_MeshDisplay.secondary.compByteWidth = 0;
|
||||
m_MeshDisplay.secondary.compType = FormatComponentType.None;
|
||||
m_MeshDisplay.secondary.bgraOrder = false;
|
||||
m_MeshDisplay.secondary.specialFormat = SpecialFormat.Unknown;
|
||||
|
||||
m_MeshDisplay.secondary.showAlpha = false;
|
||||
@@ -2638,6 +2640,7 @@ namespace renderdocui.Windows
|
||||
m_MeshDisplay.secondary.compCount = tex.format.compCount;
|
||||
m_MeshDisplay.secondary.compByteWidth = tex.format.compByteWidth;
|
||||
m_MeshDisplay.secondary.compType = tex.format.compType;
|
||||
m_MeshDisplay.secondary.bgraOrder = tex.format.bgraOrder;
|
||||
m_MeshDisplay.secondary.specialFormat = tex.format.special ? tex.format.specialFormat : SpecialFormat.Unknown;
|
||||
|
||||
m_MeshDisplay.secondary.showAlpha = CurSecondShowAlpha;
|
||||
|
||||
@@ -325,7 +325,8 @@ namespace renderdocui.Windows.PipelineState
|
||||
typename = texs[t].resType.Str();
|
||||
|
||||
if (texs[t].format.special &&
|
||||
(texs[t].format.specialFormat == SpecialFormat.D24S8 ||
|
||||
(texs[t].format.specialFormat == SpecialFormat.D16S8 ||
|
||||
texs[t].format.specialFormat == SpecialFormat.D24S8 ||
|
||||
texs[t].format.specialFormat == SpecialFormat.D32S8)
|
||||
)
|
||||
{
|
||||
|
||||
@@ -257,6 +257,7 @@ namespace renderdocui.Windows
|
||||
bool depth = false;
|
||||
|
||||
if (texture.format.compType == FormatComponentType.Depth ||
|
||||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D16S8) ||
|
||||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D24S8) ||
|
||||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D32S8) ||
|
||||
(texture.format.special && texture.format.specialFormat == SpecialFormat.S8))
|
||||
|
||||
Reference in new issue
Block a user