Browse Source

Vk: port to the new Utility::Path.

Basically just fetching SPIR-V sources from the disk. No nasty old cruft
in a need of cleanup anywhere. Me likes.
pull/556/head
Vladimír Vondruš 4 years ago
parent
commit
2356b57418
  1. 4
      doc/snippets/MagnumVk.cpp
  2. 91
      src/Magnum/Vk/Test/MeshVkTest.cpp
  3. 65
      src/Magnum/Vk/Test/PipelineVkTest.cpp
  4. 9
      src/Magnum/Vk/Test/ShaderTest.cpp
  5. 17
      src/Magnum/Vk/Test/ShaderVkTest.cpp

4
doc/snippets/MagnumVk.cpp

@ -27,7 +27,7 @@
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Utility/Algorithms.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/Path.h>
#include "Magnum/Magnum.h"
#include "Magnum/Mesh.h"
@ -1214,7 +1214,7 @@ Vk::Device device{NoCreate};
DOXYGEN_ELLIPSIS()
Vk::ShaderCreateInfo info{
CORRADE_INTERNAL_ASSERT_EXPRESSION(Utility::Directory::read("shader.spv"))
*CORRADE_INTERNAL_ASSERT_EXPRESSION(Utility::Path::read("shader.spv"))
};
DOXYGEN_ELLIPSIS()

91
src/Magnum/Vk/Test/MeshVkTest.cpp

@ -25,11 +25,12 @@
#include <sstream>
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/StringView.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/String.h>
#include <Corrade/PluginManager/Manager.h>
#include <Corrade/Utility/Algorithms.h>
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/Path.h>
#include "Magnum/ImageView.h"
#include "Magnum/PixelFormat.h"
@ -268,9 +269,10 @@ void MeshVkTest::cmdDraw() {
.setCount(4);
}
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -307,7 +309,7 @@ void MeshVkTest::cmdDraw() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
DebugTools::CompareImageToFile{_manager});
}
@ -334,9 +336,10 @@ void MeshVkTest::cmdDrawIndexed() {
.setCount(6);
}
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -373,7 +376,7 @@ void MeshVkTest::cmdDrawIndexed() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
DebugTools::CompareImageToFile{_manager});
}
@ -395,9 +398,10 @@ void MeshVkTest::cmdDrawTwoAttributes() {
.setCount(4);
}
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -434,7 +438,7 @@ void MeshVkTest::cmdDrawTwoAttributes() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.tga"),
/* ARM Mali (Android) has some minor off-by-one differences */
(DebugTools::CompareImageToFile{_manager, 0.5f, 0.012f}));
}
@ -465,9 +469,10 @@ void MeshVkTest::cmdDrawTwoAttributesTwoBindings() {
.setCount(4);
}
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -504,7 +509,7 @@ void MeshVkTest::cmdDrawTwoAttributesTwoBindings() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.tga"),
/* ARM Mali (Android) has some minor off-by-one differences */
(DebugTools::CompareImageToFile{_manager, 0.5f, 0.012f}));
}
@ -531,9 +536,10 @@ void MeshVkTest::cmdDrawNullBindingRobustness2() {
.setCount(4);
}
Shader shader{_deviceRobustness2, ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/vertexcolor.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{_deviceRobustness2, ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -570,7 +576,7 @@ void MeshVkTest::cmdDrawNullBindingRobustness2() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/nullcolor.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/nullcolor.tga"),
/* ARM Mali (Android) has some minor off-by-one differences */
(DebugTools::CompareImageToFile{_manager}));
}
@ -588,9 +594,10 @@ void MeshVkTest::cmdDrawZeroCount() {
mesh.setCount(data.count)
.setInstanceCount(data.instanceCount);
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -627,7 +634,7 @@ void MeshVkTest::cmdDrawZeroCount() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/noop.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/noop.tga"),
DebugTools::CompareImageToFile{_manager});
}
@ -638,9 +645,10 @@ void MeshVkTest::cmdDrawNoCountSet() {
Mesh mesh{MeshLayout{MeshPrimitive::Triangles}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/noop.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/noop.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -690,9 +698,10 @@ void MeshVkTest::cmdDrawDynamicPrimitive() {
.setCount(4);
}
Shader shader{_deviceExtendedDynamicState, ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{_deviceExtendedDynamicState, ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -735,7 +744,7 @@ void MeshVkTest::cmdDrawDynamicPrimitive() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
DebugTools::CompareImageToFile{_manager});
}
@ -764,9 +773,10 @@ void MeshVkTest::cmdDrawDynamicStride() {
.setCount(4);
}
Shader shader{_deviceExtendedDynamicState, ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{_deviceExtendedDynamicState, ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet
@ -810,7 +820,7 @@ void MeshVkTest::cmdDrawDynamicStride() {
CORRADE_COMPARE_WITH((ImageView2D{Magnum::PixelFormat::RGBA8Unorm,
_framebuffer.size().xy(),
_pixels.dedicatedMemory().mapRead()}),
Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.tga"),
DebugTools::CompareImageToFile{_manager});
}
@ -839,9 +849,10 @@ void MeshVkTest::cmdDrawDynamicStrideInsufficientImplementation() {
.setCount(4);
}
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"))
}};
Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "MeshTestFiles/flat.spv"));
CORRADE_VERIFY(shaderData);
Shader shader{device(), ShaderCreateInfo{*shaderData}};
ShaderSet shaderSet;
shaderSet

65
src/Magnum/Vk/Test/PipelineVkTest.cpp

@ -25,9 +25,10 @@
#include <sstream>
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/StringView.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/String.h>
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/Path.h>
#include "Magnum/Math/Range.h"
#include "Magnum/Vk/BufferCreateInfo.h"
@ -130,9 +131,9 @@ void PipelineVkTest::constructRasterization() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet
@ -200,9 +201,9 @@ void PipelineVkTest::constructRasterizationViewportNotSetDiscardEnabled() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet
@ -243,9 +244,9 @@ void PipelineVkTest::constructRasterizationViewportNotSetDynamic() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet
@ -271,9 +272,9 @@ void PipelineVkTest::constructCompute() {
{
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "compute-noop.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "compute-noop.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet.addShader(ShaderStage::Compute, shader, "main"_s);
@ -313,9 +314,9 @@ void PipelineVkTest::constructMove() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet
@ -373,9 +374,9 @@ void PipelineVkTest::wrapRasterization() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet
@ -403,9 +404,9 @@ void PipelineVkTest::wrapRasterization() {
void PipelineVkTest::wrapCompute() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "compute-noop.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "compute-noop.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet.addShader(ShaderStage::Compute, shader, "main"_s);
@ -432,9 +433,9 @@ void PipelineVkTest::dynamicRasterizationStatesNotRasterization() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "compute-noop.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "compute-noop.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet.addShader(ShaderStage::Compute, shader, "main"_s);
@ -476,9 +477,9 @@ void PipelineVkTest::cmdBindRasterization() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet
@ -512,9 +513,9 @@ void PipelineVkTest::cmdBindCompute() {
PipelineLayout pipelineLayout{device(), PipelineLayoutCreateInfo{}};
Shader shader{device(), ShaderCreateInfo{
Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "compute-noop.spv"))
}};
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "compute-noop.spv"));
CORRADE_VERIFY(data);
Shader shader{device(), ShaderCreateInfo{*data}};
ShaderSet shaderSet;
shaderSet.addShader(ShaderStage::Compute, shader, "main"_s);

9
src/Magnum/Vk/Test/ShaderTest.cpp

@ -23,10 +23,10 @@
DEALINGS IN THE SOFTWARE.
*/
#include <string>
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/String.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/Path.h>
#include "Magnum/ShaderTools/Implementation/spirv.h"
#include "Magnum/Vk/ShaderCreateInfo.h"
@ -73,10 +73,11 @@ ShaderTest::ShaderTest() {
}
void ShaderTest::spirvPatchSwiftShaderConflictingMultiEntrypointLocations() {
Containers::Array<char> data = Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "ShaderTestFiles/vert-frag.spv"));
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "ShaderTestFiles/vert-frag.spv"));
CORRADE_VERIFY(data);
/* The file is a full SPIR-V, strip the header first */
const Containers::ArrayView<const UnsignedInt> spirv = ShaderTools::Implementation::spirvData(data, data.size());
const Containers::ArrayView<const UnsignedInt> spirv = ShaderTools::Implementation::spirvData(*data, data->size());
CORRADE_VERIFY(spirv);
Containers::ArrayView<const UnsignedInt> view = spirv;

17
src/Magnum/Vk/Test/ShaderVkTest.cpp

@ -23,10 +23,11 @@
DEALINGS IN THE SOFTWARE.
*/
#include <string>
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/String.h>
#include <Corrade/TestSuite/Compare/Numeric.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/Path.h>
#include "Magnum/Vk/ShaderCreateInfo.h"
#include "Magnum/Vk/DeviceProperties.h"
@ -56,11 +57,11 @@ ShaderVkTest::ShaderVkTest() {
}
void ShaderVkTest::construct() {
Containers::Array<char> data = Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"));
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
{
Shader shader{device(), ShaderCreateInfo{data}};
Shader shader{device(), ShaderCreateInfo{*data}};
CORRADE_VERIFY(shader.handle());
CORRADE_COMPARE(shader.handleFlags(), HandleFlag::DestroyOnDestruction);
}
@ -70,10 +71,10 @@ void ShaderVkTest::construct() {
}
void ShaderVkTest::constructMove() {
Containers::Array<char> data = Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"));
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
Shader a{device(), ShaderCreateInfo{data}};
Shader a{device(), ShaderCreateInfo{*data}};
VkShaderModule handle = a.handle();
Shader b = std::move(a);
@ -93,12 +94,12 @@ void ShaderVkTest::constructMove() {
}
void ShaderVkTest::wrap() {
Containers::Array<char> data = Utility::Directory::read(Utility::Directory::join(VK_TEST_DIR, "triangle-shaders.spv"));
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(VK_TEST_DIR, "triangle-shaders.spv"));
CORRADE_VERIFY(data);
VkShaderModule shader{};
CORRADE_COMPARE(Result(device()->CreateShaderModule(device(),
ShaderCreateInfo{data},
ShaderCreateInfo{*data},
nullptr, &shader)), Result::Success);
auto wrapped = Shader::wrap(device(), shader, HandleFlag::DestroyOnDestruction);

Loading…
Cancel
Save