Ray tracing works on linux for some reason

This commit is contained in:
2025-05-23 05:07:03 +02:00
parent a398ca65fc
commit a78377741c
8 changed files with 95 additions and 89 deletions
+1 -1
View File
@@ -114,8 +114,8 @@ void EnvironmentLoader::import(EnvironmentImportArgs args, PEnvironmentMapAsset
glm::lookAt(Vector(0.0f, 0.0f, 0.0f), Vector(-1.0f, 0.0f, 0.0f), Vector(0.0f, 1.0f, 0.0f)),
glm::lookAt(Vector(0.0f, 0.0f, 0.0f), Vector(0.0f, 1.0f, 0.0f), Vector(0.0f, 0.0f, 1.0f)),
glm::lookAt(Vector(0.0f, 0.0f, 0.0f), Vector(0.0f, -1.0f, 0.0f), Vector(0.0f, 0.0f, -1.0f)),
glm::lookAt(Vector(0.0f, 0.0f, 0.0f), Vector(0.0f, 0.0f, 1.0f), Vector(0.0f, 1.0f, 0.0f)),
glm::lookAt(Vector(0.0f, 0.0f, 0.0f), Vector(0.0f, 0.0f, -1.0f), Vector(0.0f, 1.0f, 0.0f)),
glm::lookAt(Vector(0.0f, 0.0f, 0.0f), Vector(0.0f, 0.0f, 1.0f), Vector(0.0f, 1.0f, 0.0f)),
};
Gfx::PDescriptorSet set = cubeRenderLayout->allocateDescriptorSet();
set->updateConstants("view", 0, captureViews);
+1 -1
View File
@@ -382,7 +382,7 @@ void MeshLoader::loadMaterials(const aiScene* scene, const Array<PTextureAsset>&
brdf.variables["normal"] = "NormalSub";
}
aiShadingMode mode;
aiShadingMode mode = aiShadingMode_CookTorrance;
material->Get(AI_MATKEY_SHADING_MODEL, mode);
switch (mode) {
case aiShadingMode_Phong:
+5 -4
View File
@@ -271,15 +271,16 @@ void VertexData::loadMesh(MeshId id, Array<Vector> loadedPositions, Array<uint32
// load LOD 0
size_t previousMeshletsStart = meshlets.size(); // todo:
loadMeshlets(id, loadedPositions, loadedIndices);
std::memcpy(positions.data() + mesh.vertexOffset, loadedPositions.data(), loadedPositions.size() * sizeof(Vector));
/* const int maxLod = 25;
/*const int maxLod = 25;
for (int lod = 0; lod < maxLod; ++lod) {
float tLod = lod / (float)maxLod;
std::span<MeshletDescription> previousLevelMeshlets =
std::span{meshlets.data() + previousMeshletsStart, meshlets.size() - previousMeshletsStart};
if (previousLevelMeshlets.size() <= 1) {
return;
break;
}
auto groups = groupMeshlets(previousLevelMeshlets);
const uint32 newMeshletStart = meshlets.size();
@@ -291,7 +292,8 @@ void VertexData::loadMesh(MeshId id, Array<Vector> loadedPositions, Array<uint32
size_t start = groupVertexIndices.size();
groupVertexIndices.resize(start + meshlet.primitiveIndices.size * 3);
for (size_t j = 0; j < meshlet.primitiveIndices.size * 3; ++j) {
groupVertexIndices[j + start] = vertexIndices[meshlet.vertexIndices.offset + primitiveIndices[meshlet.primitiveIndices.offset + j]];
groupVertexIndices[j + start] =
vertexIndices[meshlet.vertexIndices.offset + primitiveIndices[meshlet.primitiveIndices.offset + j]];
}
}
const float threshold = 0.5f;
@@ -316,7 +318,6 @@ void VertexData::loadMesh(MeshId id, Array<Vector> loadedPositions, Array<uint32
}
}
}*/
std::memcpy(positions.data() + mesh.vertexOffset, loadedPositions.data(), loadedPositions.size() * sizeof(Vector));
}
void VertexData::removeMesh(MeshId id) {
+2 -2
View File
@@ -801,7 +801,7 @@ void Graphics::pickPhysicalDevice() {
shaderFloatControls = true;
}
}
rayTracingEnabled = false && rayTracingPipelineSupport && accelerationStructureSupport && hostOperationsSupport && deviceAddressSupport &&
rayTracingEnabled = rayTracingPipelineSupport && accelerationStructureSupport && hostOperationsSupport && deviceAddressSupport &&
descriptorIndexingSupport && spirv14Support && shaderFloatControls;
}
@@ -810,7 +810,7 @@ void Graphics::createDevice(GraphicsInitializer initializer) {
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &numQueueFamilies, nullptr);
Array<VkQueueFamilyProperties> queueProperties(numQueueFamilies);
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &numQueueFamilies, queueProperties.data());
Array<VkDeviceQueueCreateInfo> queueInfos;
struct QueueCreateInfo {
int32 familyIndex = -1;