added pvrtc support

This commit is contained in:
Marton Tamas
2017-09-27 16:13:48 +01:00
committed by baldurk
parent 2a7944fd1d
commit a018deb19f
6 changed files with 65 additions and 4 deletions
+2
View File
@@ -3254,6 +3254,7 @@ void TextureViewer::on_viewTexBuffer_clicked()
case ResourceFormatType::ETC2:
case ResourceFormatType::EAC:
case ResourceFormatType::ASTC:
case ResourceFormatType::PVRTC:
varName = lit("block");
// display a 4x4 block at a time
w /= 4;
@@ -3280,6 +3281,7 @@ void TextureViewer::on_viewTexBuffer_clicked()
case ResourceFormatType::BC4:
case ResourceFormatType::ETC2:
case ResourceFormatType::EAC:
case ResourceFormatType::PVRTC:
baseType = lit("row_major xint2x1");
break;
// 4x4 byte block, for 128-bit block formats
+1
View File
@@ -1142,6 +1142,7 @@ enum class ResourceFormatType : uint8_t
D32S8,
S8,
YUV,
PVRTC,
};
DOCUMENT(R"(An API specific hint for a certain behaviour. A legacy concept in OpenGL that controls
+30 -2
View File
@@ -337,6 +337,14 @@ ResourceFormat MakeResourceFormat(VkFormat fmt)
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: ret.type = ResourceFormatType::ASTC; break;
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: ret.type = ResourceFormatType::PVRTC; break;
default: break;
}
@@ -542,7 +550,11 @@ ResourceFormat MakeResourceFormat(VkFormat fmt)
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_SRGB: ret.srgbCorrected = true; break;
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: ret.srgbCorrected = true; break;
default: break;
}
@@ -623,7 +635,15 @@ ResourceFormat MakeResourceFormat(VkFormat fmt)
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
case VK_FORMAT_A2B10G10R10_UNORM_PACK32: ret.compType = CompType::UNorm; break;
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: ret.compType = CompType::UNorm; break;
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8B8_SNORM:
@@ -2910,6 +2930,14 @@ string ToStrHelper<false, VkFormat>::Get(const VkFormat &el)
TOSTR_CASE_STRINGIZE(VK_FORMAT_ASTC_12x10_SRGB_BLOCK)
TOSTR_CASE_STRINGIZE(VK_FORMAT_ASTC_12x12_UNORM_BLOCK)
TOSTR_CASE_STRINGIZE(VK_FORMAT_ASTC_12x12_SRGB_BLOCK)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG)
TOSTR_CASE_STRINGIZE(VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG)
default: break;
}
+5
View File
@@ -762,6 +762,11 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME, VK_EXT_VALIDATION_FLAGS_SPEC_VERSION,
},
#ifdef VK_IMG_format_pvrtc
{
VK_IMG_FORMAT_PVRTC_EXTENSION_NAME, VK_IMG_FORMAT_PVRTC_SPEC_VERSION,
},
#endif
#ifdef VK_KHR_android_surface
{
VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, VK_KHR_ANDROID_SURFACE_SPEC_VERSION,
+26 -2
View File
@@ -184,7 +184,15 @@ bool IsBlockFormat(VkFormat f)
case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: return true;
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: return true;
default: break;
}
@@ -290,7 +298,11 @@ bool IsSRGBFormat(VkFormat f)
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_SRGB: return true;
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: return true;
default: break;
}
@@ -707,6 +719,18 @@ uint32_t GetByteSize(uint32_t Width, uint32_t Height, uint32_t Depth, VkFormat F
astc[0] = 12;
astc[1] = 12;
break;
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
ret = (uint32_t)(ceil(w / 8.0) * ceil(h / 4.0) * 8.0);
break;
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:
ret = (uint32_t)(ceil(w / 4.0) * ceil(h / 4.0) * 8.0);
break;
default:
ret = 1;
RDCERR("Unrecognised Vulkan Format: %d", Format);
+1
View File
@@ -570,6 +570,7 @@ static std::string ResourceFormatName(const ResourceFormat &fmt)
case ResourceFormatType::D32S8: return "D32S8";
case ResourceFormatType::S8: return "S8";
case ResourceFormatType::YUV: return "YUV";
case ResourceFormatType::PVRTC: return "PVRTC";
}
}
else if(fmt.compType == CompType::Depth)