Acceleration structures suck
This commit is contained in:
@@ -16,6 +16,9 @@ int main()
|
|||||||
scene->addModels(ModelLoader::loadModel("../../res/models/cube.fbx"),
|
scene->addModels(ModelLoader::loadModel("../../res/models/cube.fbx"),
|
||||||
glm::mat4(glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
|
glm::mat4(glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
|
||||||
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)));
|
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)));
|
||||||
|
scene->addModels(ModelLoader::loadModel("../../res/models/cube.fbx"),
|
||||||
|
glm::mat4(glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
|
||||||
|
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)));
|
||||||
scene->generate();
|
scene->generate();
|
||||||
Window window(1920, 1080);
|
Window window(1920, 1080);
|
||||||
Camera camera = Camera{
|
Camera camera = Camera{
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ kernel void computeKernel(
|
|||||||
if (payload.depth > 5)
|
if (payload.depth > 5)
|
||||||
{
|
{
|
||||||
if (payload.rnd01.z >= p)
|
if (payload.rnd01.z >= p)
|
||||||
return;
|
break;
|
||||||
else
|
else
|
||||||
payload.accumulatedMaterial /= p;
|
payload.accumulatedMaterial /= p;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ void MetalScene::createRayTracingHierarchy()
|
|||||||
MTL::AccelerationStructureTriangleGeometryDescriptor* descriptor = MTL::AccelerationStructureTriangleGeometryDescriptor::descriptor();
|
MTL::AccelerationStructureTriangleGeometryDescriptor* descriptor = MTL::AccelerationStructureTriangleGeometryDescriptor::descriptor();
|
||||||
descriptor->setTriangleCount(refs[i].numIndices / 3);
|
descriptor->setTriangleCount(refs[i].numIndices / 3);
|
||||||
descriptor->setIndexBuffer(indicesBuffer);
|
descriptor->setIndexBuffer(indicesBuffer);
|
||||||
descriptor->setIndexBufferOffset(refs[i].indicesOffset);
|
descriptor->setIndexBufferOffset(refs[i].indicesOffset * sizeof(glm::uvec3));
|
||||||
descriptor->setVertexBufferOffset(refs[i].positionOffset);
|
|
||||||
descriptor->setVertexBuffer(positionBuffer);
|
|
||||||
descriptor->setIndexType(MTL::IndexTypeUInt32);
|
descriptor->setIndexType(MTL::IndexTypeUInt32);
|
||||||
|
descriptor->setVertexBuffer(positionBuffer);
|
||||||
|
descriptor->setVertexBufferOffset(refs[i].positionOffset * sizeof(glm::vec3));
|
||||||
|
|
||||||
MTL::PrimitiveAccelerationStructureDescriptor* primitiveDescriptor = MTL::PrimitiveAccelerationStructureDescriptor::descriptor();
|
MTL::PrimitiveAccelerationStructureDescriptor* primitiveDescriptor = MTL::PrimitiveAccelerationStructureDescriptor::descriptor();
|
||||||
primitiveDescriptor->setGeometryDescriptors(NS::Array::array(descriptor));
|
primitiveDescriptor->setGeometryDescriptors(NS::Array::array(descriptor));
|
||||||
@@ -85,11 +85,9 @@ void MetalScene::createRayTracingHierarchy()
|
|||||||
accelDesc->setInstanceDescriptorBuffer(instanceBuffer);
|
accelDesc->setInstanceDescriptorBuffer(instanceBuffer);
|
||||||
accelDesc->setInstanceCount(refs.size());
|
accelDesc->setInstanceCount(refs.size());
|
||||||
|
|
||||||
accelerationStructure = device->newAccelerationStructure(accelDesc);
|
MTL::AccelerationStructureSizes accelSizes = device->accelerationStructureSizes(accelDesc);
|
||||||
accelerationStructure->setLabel(NS::String::string("InstanceAccelerationStructure", NS::ASCIIStringEncoding));
|
|
||||||
std::cout << accelerationStructure->debugDescription()->cString(NS::ASCIIStringEncoding) << std::endl;
|
|
||||||
/*MTL::AccelerationStructureSizes accelSizes = device->accelerationStructureSizes(accelDesc);
|
|
||||||
MTL::AccelerationStructure* tempStructure = device->newAccelerationStructure(accelSizes.accelerationStructureSize);
|
MTL::AccelerationStructure* tempStructure = device->newAccelerationStructure(accelSizes.accelerationStructureSize);
|
||||||
|
tempStructure->setLabel(NS::String::string("Temporary AS", NS::ASCIIStringEncoding));
|
||||||
MTL::Buffer* scratchBuffer = device->newBuffer(accelSizes.buildScratchBufferSize, MTL::StorageModeManaged);
|
MTL::Buffer* scratchBuffer = device->newBuffer(accelSizes.buildScratchBufferSize, MTL::StorageModeManaged);
|
||||||
MTL::CommandBuffer* cmdBuffer = queue->commandBuffer();
|
MTL::CommandBuffer* cmdBuffer = queue->commandBuffer();
|
||||||
MTL::AccelerationStructureCommandEncoder* encoder = cmdBuffer->accelerationStructureCommandEncoder();
|
MTL::AccelerationStructureCommandEncoder* encoder = cmdBuffer->accelerationStructureCommandEncoder();
|
||||||
@@ -101,10 +99,11 @@ void MetalScene::createRayTracingHierarchy()
|
|||||||
cmdBuffer->waitUntilCompleted();
|
cmdBuffer->waitUntilCompleted();
|
||||||
uint compactedSize = *(uint*)compactedBuffer->contents();
|
uint compactedSize = *(uint*)compactedBuffer->contents();
|
||||||
accelerationStructure = device->newAccelerationStructure(compactedSize);
|
accelerationStructure = device->newAccelerationStructure(compactedSize);
|
||||||
|
accelerationStructure->setLabel(NS::String::string("Instance AS", NS::ASCIIStringEncoding));
|
||||||
cmdBuffer = queue->commandBuffer();
|
cmdBuffer = queue->commandBuffer();
|
||||||
encoder = cmdBuffer->accelerationStructureCommandEncoder();
|
encoder = cmdBuffer->accelerationStructureCommandEncoder();
|
||||||
encoder->copyAndCompactAccelerationStructure(tempStructure, accelerationStructure);
|
encoder->copyAndCompactAccelerationStructure(tempStructure, accelerationStructure);
|
||||||
encoder->endEncoding();
|
encoder->endEncoding();
|
||||||
cmdBuffer->commit();
|
cmdBuffer->commit();
|
||||||
cmdBuffer->waitUntilCompleted();*/
|
cmdBuffer->waitUntilCompleted();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user