bugfixes
This commit is contained in:
parent
d29f5609cd
commit
d840a81448
5 changed files with 45 additions and 36 deletions
29
examples/VulkanTriangle/project.cpp
Normal file
29
examples/VulkanTriangle/project.cpp
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
import std;
|
||||||
|
import Crafter.Build;
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
using namespace Crafter;
|
||||||
|
|
||||||
|
extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> args) {
|
||||||
|
std::vector<std::string> graphicsArgs(args.begin(), args.end());
|
||||||
|
graphicsArgs.push_back("--vulkan");
|
||||||
|
Configuration* graphics = LocalProject({
|
||||||
|
.projectFile = "../../project.cpp",
|
||||||
|
.args = graphicsArgs,
|
||||||
|
});
|
||||||
|
|
||||||
|
Configuration cfg;
|
||||||
|
cfg.path = "./";
|
||||||
|
cfg.name = "VulkanTriangle";
|
||||||
|
cfg.outputName = "VulkanTriangle";
|
||||||
|
ApplyStandardArgs(cfg, args);
|
||||||
|
cfg.dependencies = { graphics };
|
||||||
|
|
||||||
|
std::array<fs::path, 0> ifaces = {};
|
||||||
|
std::array<fs::path, 1> impls = { "main" };
|
||||||
|
cfg.GetInterfacesAndImplementations(ifaces, impls);
|
||||||
|
|
||||||
|
cfg.shaders.emplace_back(fs::path("raygen.glsl"), std::string("main"), ShaderType::RayGen);
|
||||||
|
cfg.shaders.emplace_back(fs::path("closesthit.glsl"), std::string("main"), ShaderType::ClosestHit);
|
||||||
|
cfg.shaders.emplace_back(fs::path("miss.glsl"), std::string("main"), ShaderType::Miss);
|
||||||
|
return cfg;
|
||||||
|
}
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
{
|
|
||||||
"name": "crafter-graphics",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "executable",
|
|
||||||
"implementations": ["main"],
|
|
||||||
"dependencies": [
|
|
||||||
{
|
|
||||||
"path":"../../project.json",
|
|
||||||
"configuration":"lib-wayland-vulkan-debug"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"shaders": [
|
|
||||||
{
|
|
||||||
"path":"raygen.glsl",
|
|
||||||
"type": 6,
|
|
||||||
"entrypoint":"main"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path":"closesthit.glsl",
|
|
||||||
"type": 9,
|
|
||||||
"entrypoint":"main"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path":"miss.glsl",
|
|
||||||
"type": 10,
|
|
||||||
"entrypoint":"main"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -40,7 +40,7 @@ void Mesh::Build(std::span<Vector<float, 3, 3>> verticies, std::span<std::uint32
|
||||||
std::memcpy(indexBuffer.value, indicies.data(), indicies.size() * sizeof(std::uint32_t));
|
std::memcpy(indexBuffer.value, indicies.data(), indicies.size() * sizeof(std::uint32_t));
|
||||||
|
|
||||||
vertexBuffer.FlushDevice(cmd, VK_ACCESS_MEMORY_READ_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR);
|
vertexBuffer.FlushDevice(cmd, VK_ACCESS_MEMORY_READ_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR);
|
||||||
vertexBuffer.FlushDevice(cmd, VK_ACCESS_MEMORY_READ_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR);
|
indexBuffer.FlushDevice(cmd, VK_ACCESS_MEMORY_READ_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR);
|
||||||
|
|
||||||
VkDeviceOrHostAddressConstKHR vertexAddr;
|
VkDeviceOrHostAddressConstKHR vertexAddr;
|
||||||
vertexAddr.deviceAddress = vertexBuffer.address;
|
vertexAddr.deviceAddress = vertexBuffer.address;
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,18 @@ using namespace Crafter;
|
||||||
std::vector<RenderingElement3D*> RenderingElement3D::elements;
|
std::vector<RenderingElement3D*> RenderingElement3D::elements;
|
||||||
|
|
||||||
void RenderingElement3D::BuildTLAS(VkCommandBuffer cmd, std::uint32_t index) {
|
void RenderingElement3D::BuildTLAS(VkCommandBuffer cmd, std::uint32_t index) {
|
||||||
|
{
|
||||||
|
VkMemoryBarrier asBarrier {
|
||||||
|
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
|
||||||
|
.srcAccessMask = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
|
||||||
|
.dstAccessMask = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
|
||||||
|
};
|
||||||
|
vkCmdPipelineBarrier(cmd,
|
||||||
|
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
|
||||||
|
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
|
||||||
|
0, 1, &asBarrier, 0, nullptr, 0, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
tlases[index].instanceBuffer.Resize(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, elements.size());
|
tlases[index].instanceBuffer.Resize(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, elements.size());
|
||||||
|
|
||||||
for(std::uint32_t i = 0; i < elements.size(); i++) {
|
for(std::uint32_t i = 0; i < elements.size(); i++) {
|
||||||
|
|
@ -77,8 +89,8 @@ void RenderingElement3D::BuildTLAS(VkCommandBuffer cmd, std::uint32_t index) {
|
||||||
&tlasBuildSizes
|
&tlasBuildSizes
|
||||||
);
|
);
|
||||||
|
|
||||||
scratchBuffer.Resize(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, tlasBuildSizes.buildScratchSize);
|
tlases[index].scratchBuffer.Resize(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, tlasBuildSizes.buildScratchSize);
|
||||||
tlasBuildGeometryInfo.scratchData.deviceAddress = scratchBuffer.address;
|
tlasBuildGeometryInfo.scratchData.deviceAddress = tlases[index].scratchBuffer.address;
|
||||||
|
|
||||||
tlases[index].buffer.Resize(VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, tlasBuildSizes.accelerationStructureSize);
|
tlases[index].buffer.Resize(VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, tlasBuildSizes.accelerationStructureSize);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,13 +35,13 @@ export namespace Crafter {
|
||||||
VulkanBuffer<char, false> buffer;
|
VulkanBuffer<char, false> buffer;
|
||||||
VkAccelerationStructureKHR accelerationStructure;
|
VkAccelerationStructureKHR accelerationStructure;
|
||||||
VulkanBuffer<VkAccelerationStructureInstanceKHR, true> instanceBuffer;
|
VulkanBuffer<VkAccelerationStructureInstanceKHR, true> instanceBuffer;
|
||||||
|
VulkanBuffer<char, false> scratchBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RenderingElement3D {
|
class RenderingElement3D {
|
||||||
public:
|
public:
|
||||||
VkAccelerationStructureInstanceKHR instance;
|
VkAccelerationStructureInstanceKHR instance;
|
||||||
static std::vector<RenderingElement3D*> elements;
|
static std::vector<RenderingElement3D*> elements;
|
||||||
inline static VulkanBuffer<char, false> scratchBuffer;
|
|
||||||
inline static TlasWithBuffer tlases[Window::numFrames];
|
inline static TlasWithBuffer tlases[Window::numFrames];
|
||||||
static void BuildTLAS(VkCommandBuffer cmd, std::uint32_t index);
|
static void BuildTLAS(VkCommandBuffer cmd, std::uint32_t index);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue