Browse Source

Vk: make room for mapping vertex formats to a VkFormat.

pull/275/head
Vladimír Vondruš 6 years ago
parent
commit
41cf29cff6
  1. 24
      src/Magnum/Vk/Enums.cpp
  2. 0
      src/Magnum/Vk/Implementation/compressedPixelFormatMapping.hpp
  3. 0
      src/Magnum/Vk/Implementation/pixelFormatMapping.hpp
  4. 52
      src/Magnum/Vk/Test/EnumsTest.cpp

24
src/Magnum/Vk/Enums.cpp

@ -54,18 +54,18 @@ constexpr VkIndexType IndexTypeMapping[]{
#ifndef DOXYGEN_GENERATING_OUTPUT /* It gets *really* confused */ #ifndef DOXYGEN_GENERATING_OUTPUT /* It gets *really* confused */
static_assert(VK_FORMAT_UNDEFINED == 0, "VK_FORMAT_UNDEFINED is assumed to be 0"); static_assert(VK_FORMAT_UNDEFINED == 0, "VK_FORMAT_UNDEFINED is assumed to be 0");
constexpr VkFormat FormatMapping[] { constexpr VkFormat PixelFormatMapping[] {
#define _c(input, format) VK_FORMAT_ ## format, #define _c(input, format) VK_FORMAT_ ## format,
#define _s(input) {}, #define _s(input) {},
#include "Magnum/Vk/Implementation/formatMapping.hpp" #include "Magnum/Vk/Implementation/pixelFormatMapping.hpp"
#undef _s #undef _s
#undef _c #undef _c
}; };
constexpr VkFormat CompressedFormatMapping[] { constexpr VkFormat CompressedPixelFormatMapping[] {
#define _c(input, format) VK_FORMAT_ ## format, #define _c(input, format) VK_FORMAT_ ## format,
#define _s(input) {}, #define _s(input) {},
#include "Magnum/Vk/Implementation/compressedFormatMapping.hpp" #include "Magnum/Vk/Implementation/compressedPixelFormatMapping.hpp"
#undef _s #undef _s
#undef _c #undef _c
}; };
@ -126,27 +126,27 @@ bool hasVkFormat(const Magnum::PixelFormat format) {
if(isPixelFormatImplementationSpecific(format)) if(isPixelFormatImplementationSpecific(format))
return true; return true;
CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(FormatMapping), CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(PixelFormatMapping),
"Vk::hasVkFormat(): invalid format" << format, {}); "Vk::hasVkFormat(): invalid format" << format, {});
return UnsignedInt(FormatMapping[UnsignedInt(format) - 1]); return UnsignedInt(PixelFormatMapping[UnsignedInt(format) - 1]);
} }
bool hasVkFormat(const Magnum::CompressedPixelFormat format) { bool hasVkFormat(const Magnum::CompressedPixelFormat format) {
if(isCompressedPixelFormatImplementationSpecific(format)) if(isCompressedPixelFormatImplementationSpecific(format))
return true; return true;
CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(CompressedFormatMapping), CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(CompressedPixelFormatMapping),
"Vk::hasVkFormat(): invalid format" << format, {}); "Vk::hasVkFormat(): invalid format" << format, {});
return UnsignedInt(CompressedFormatMapping[UnsignedInt(format) - 1]); return UnsignedInt(CompressedPixelFormatMapping[UnsignedInt(format) - 1]);
} }
VkFormat vkFormat(const Magnum::PixelFormat format) { VkFormat vkFormat(const Magnum::PixelFormat format) {
if(isPixelFormatImplementationSpecific(format)) if(isPixelFormatImplementationSpecific(format))
return pixelFormatUnwrap<VkFormat>(format); return pixelFormatUnwrap<VkFormat>(format);
CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(FormatMapping), CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(PixelFormatMapping),
"Vk::vkFormat(): invalid format" << format, {}); "Vk::vkFormat(): invalid format" << format, {});
const VkFormat out = FormatMapping[UnsignedInt(format) - 1]; const VkFormat out = PixelFormatMapping[UnsignedInt(format) - 1];
CORRADE_ASSERT(UnsignedInt(out), CORRADE_ASSERT(UnsignedInt(out),
"Vk::vkFormat(): unsupported format" << format, {}); "Vk::vkFormat(): unsupported format" << format, {});
return out; return out;
@ -156,9 +156,9 @@ VkFormat vkFormat(const Magnum::CompressedPixelFormat format) {
if(isCompressedPixelFormatImplementationSpecific(format)) if(isCompressedPixelFormatImplementationSpecific(format))
return compressedPixelFormatUnwrap<VkFormat>(format); return compressedPixelFormatUnwrap<VkFormat>(format);
CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(CompressedFormatMapping), CORRADE_ASSERT(UnsignedInt(format) - 1 < Containers::arraySize(CompressedPixelFormatMapping),
"Vk::vkFormat(): invalid format" << format, {}); "Vk::vkFormat(): invalid format" << format, {});
const VkFormat out = CompressedFormatMapping[UnsignedInt(format) - 1]; const VkFormat out = CompressedPixelFormatMapping[UnsignedInt(format) - 1];
CORRADE_ASSERT(UnsignedInt(out), CORRADE_ASSERT(UnsignedInt(out),
"Vk::vkFormat(): unsupported format" << format, {}); "Vk::vkFormat(): unsupported format" << format, {});
return out; return out;

0
src/Magnum/Vk/Implementation/compressedFormatMapping.hpp → src/Magnum/Vk/Implementation/compressedPixelFormatMapping.hpp

0
src/Magnum/Vk/Implementation/formatMapping.hpp → src/Magnum/Vk/Implementation/pixelFormatMapping.hpp

52
src/Magnum/Vk/Test/EnumsTest.cpp

@ -47,15 +47,15 @@ struct EnumsTest: TestSuite::Tester {
void mapVkIndexTypeUnsupported(); void mapVkIndexTypeUnsupported();
void mapVkIndexTypeInvalid(); void mapVkIndexTypeInvalid();
void mapVkFormat(); void mapVkFormatPixelFormat();
void mapVkFormatImplementationSpecific(); void mapVkFormatPixelFormatImplementationSpecific();
void mapVkFormatUnsupported(); void mapVkFormatPixelFormatUnsupported();
void mapVkFormatInvalid(); void mapVkFormatPixelFormatInvalid();
void mapVkFormatCompressed(); void mapVkFormatCompressedPixelFormat();
void mapVkFormatCompressedImplementationSpecific(); void mapVkFormatCompressedPixelFormatImplementationSpecific();
void mapVkFormatCompressedUnsupported(); void mapVkFormatCompressedPixelFormatUnsupported();
void mapVkFormatCompressedInvalid(); void mapVkFormatCompressedPixelFormatInvalid();
void mapVkFilter(); void mapVkFilter();
void mapVkFilterInvalid(); void mapVkFilterInvalid();
@ -78,15 +78,15 @@ EnumsTest::EnumsTest() {
&EnumsTest::mapVkIndexTypeUnsupported, &EnumsTest::mapVkIndexTypeUnsupported,
&EnumsTest::mapVkIndexTypeInvalid, &EnumsTest::mapVkIndexTypeInvalid,
&EnumsTest::mapVkFormat, &EnumsTest::mapVkFormatPixelFormat,
&EnumsTest::mapVkFormatImplementationSpecific, &EnumsTest::mapVkFormatPixelFormatImplementationSpecific,
&EnumsTest::mapVkFormatUnsupported, &EnumsTest::mapVkFormatPixelFormatUnsupported,
&EnumsTest::mapVkFormatInvalid, &EnumsTest::mapVkFormatPixelFormatInvalid,
&EnumsTest::mapVkFormatCompressed, &EnumsTest::mapVkFormatCompressedPixelFormat,
&EnumsTest::mapVkFormatCompressedImplementationSpecific, &EnumsTest::mapVkFormatCompressedPixelFormatImplementationSpecific,
&EnumsTest::mapVkFormatCompressedUnsupported, &EnumsTest::mapVkFormatCompressedPixelFormatUnsupported,
&EnumsTest::mapVkFormatCompressedInvalid, &EnumsTest::mapVkFormatCompressedPixelFormatInvalid,
&EnumsTest::mapVkFilter, &EnumsTest::mapVkFilter,
&EnumsTest::mapVkFilterInvalid, &EnumsTest::mapVkFilterInvalid,
@ -173,7 +173,7 @@ void EnumsTest::mapVkIndexTypeInvalid() {
"Vk::vkIndexType(): invalid type MeshIndexType(0x123)\n"); "Vk::vkIndexType(): invalid type MeshIndexType(0x123)\n");
} }
void EnumsTest::mapVkFormat() { void EnumsTest::mapVkFormatPixelFormat() {
/* Touchstone verification */ /* Touchstone verification */
CORRADE_VERIFY(hasVkFormat(Magnum::PixelFormat::RGBA8Unorm)); CORRADE_VERIFY(hasVkFormat(Magnum::PixelFormat::RGBA8Unorm));
CORRADE_COMPARE(vkFormat(Magnum::PixelFormat::RGBA8Unorm), VK_FORMAT_R8G8B8A8_UNORM); CORRADE_COMPARE(vkFormat(Magnum::PixelFormat::RGBA8Unorm), VK_FORMAT_R8G8B8A8_UNORM);
@ -217,7 +217,7 @@ void EnumsTest::mapVkFormat() {
++nextHandled; \ ++nextHandled; \
continue; \ continue; \
} }
#include "Magnum/Vk/Implementation/formatMapping.hpp" #include "Magnum/Vk/Implementation/pixelFormatMapping.hpp"
#undef _s #undef _s
#undef _c #undef _c
} }
@ -234,13 +234,13 @@ void EnumsTest::mapVkFormat() {
CORRADE_COMPARE(firstUnhandled, 0xffff); CORRADE_COMPARE(firstUnhandled, 0xffff);
} }
void EnumsTest::mapVkFormatImplementationSpecific() { void EnumsTest::mapVkFormatPixelFormatImplementationSpecific() {
CORRADE_VERIFY(hasVkFormat(Magnum::pixelFormatWrap(VK_FORMAT_A8B8G8R8_SINT_PACK32))); CORRADE_VERIFY(hasVkFormat(Magnum::pixelFormatWrap(VK_FORMAT_A8B8G8R8_SINT_PACK32)));
CORRADE_COMPARE(vkFormat(Magnum::pixelFormatWrap(VK_FORMAT_A8B8G8R8_SINT_PACK32)), CORRADE_COMPARE(vkFormat(Magnum::pixelFormatWrap(VK_FORMAT_A8B8G8R8_SINT_PACK32)),
VK_FORMAT_A8B8G8R8_SINT_PACK32); VK_FORMAT_A8B8G8R8_SINT_PACK32);
} }
void EnumsTest::mapVkFormatUnsupported() { void EnumsTest::mapVkFormatPixelFormatUnsupported() {
#if 1 #if 1
CORRADE_SKIP("All pixel formats are supported."); CORRADE_SKIP("All pixel formats are supported.");
#else #else
@ -252,7 +252,7 @@ void EnumsTest::mapVkFormatUnsupported() {
#endif #endif
} }
void EnumsTest::mapVkFormatInvalid() { void EnumsTest::mapVkFormatPixelFormatInvalid() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
@ -267,7 +267,7 @@ void EnumsTest::mapVkFormatInvalid() {
"Vk::vkFormat(): invalid format PixelFormat(0x123)\n"); "Vk::vkFormat(): invalid format PixelFormat(0x123)\n");
} }
void EnumsTest::mapVkFormatCompressed() { void EnumsTest::mapVkFormatCompressedPixelFormat() {
/* Touchstone verification */ /* Touchstone verification */
CORRADE_VERIFY(hasVkFormat(Magnum::CompressedPixelFormat::Bc1RGBAUnorm)); CORRADE_VERIFY(hasVkFormat(Magnum::CompressedPixelFormat::Bc1RGBAUnorm));
CORRADE_COMPARE(vkFormat(Magnum::CompressedPixelFormat::Bc1RGBAUnorm), VK_FORMAT_BC1_RGBA_UNORM_BLOCK); CORRADE_COMPARE(vkFormat(Magnum::CompressedPixelFormat::Bc1RGBAUnorm), VK_FORMAT_BC1_RGBA_UNORM_BLOCK);
@ -311,7 +311,7 @@ void EnumsTest::mapVkFormatCompressed() {
++nextHandled; \ ++nextHandled; \
continue; \ continue; \
} }
#include "Magnum/Vk/Implementation/compressedFormatMapping.hpp" #include "Magnum/Vk/Implementation/compressedPixelFormatMapping.hpp"
#undef _s #undef _s
#undef _c #undef _c
} }
@ -328,13 +328,13 @@ void EnumsTest::mapVkFormatCompressed() {
CORRADE_COMPARE(firstUnhandled, 0xffff); CORRADE_COMPARE(firstUnhandled, 0xffff);
} }
void EnumsTest::mapVkFormatCompressedImplementationSpecific() { void EnumsTest::mapVkFormatCompressedPixelFormatImplementationSpecific() {
CORRADE_VERIFY(hasVkFormat(Magnum::compressedPixelFormatWrap(VK_FORMAT_ASTC_10x6_UNORM_BLOCK))); CORRADE_VERIFY(hasVkFormat(Magnum::compressedPixelFormatWrap(VK_FORMAT_ASTC_10x6_UNORM_BLOCK)));
CORRADE_COMPARE(vkFormat(Magnum::compressedPixelFormatWrap(VK_FORMAT_ASTC_10x6_UNORM_BLOCK)), CORRADE_COMPARE(vkFormat(Magnum::compressedPixelFormatWrap(VK_FORMAT_ASTC_10x6_UNORM_BLOCK)),
VK_FORMAT_ASTC_10x6_UNORM_BLOCK); VK_FORMAT_ASTC_10x6_UNORM_BLOCK);
} }
void EnumsTest::mapVkFormatCompressedUnsupported() { void EnumsTest::mapVkFormatCompressedPixelFormatUnsupported() {
CORRADE_VERIFY(!hasVkFormat(Magnum::CompressedPixelFormat::Astc3x3x3RGBAUnorm)); CORRADE_VERIFY(!hasVkFormat(Magnum::CompressedPixelFormat::Astc3x3x3RGBAUnorm));
std::ostringstream out; std::ostringstream out;
@ -343,7 +343,7 @@ void EnumsTest::mapVkFormatCompressedUnsupported() {
CORRADE_COMPARE(out.str(), "Vk::vkFormat(): unsupported format CompressedPixelFormat::Astc3x3x3RGBAUnorm\n"); CORRADE_COMPARE(out.str(), "Vk::vkFormat(): unsupported format CompressedPixelFormat::Astc3x3x3RGBAUnorm\n");
} }
void EnumsTest::mapVkFormatCompressedInvalid() { void EnumsTest::mapVkFormatCompressedPixelFormatInvalid() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};

Loading…
Cancel
Save