Fix build error on macOS x86, after Metal motion blur workaround
Ref #114544
This commit is contained in:
parent
10848b9774
commit
fe9e28c086
@ -131,62 +131,6 @@ BVHMetal::~BVHMetal()
|
||||
}
|
||||
}
|
||||
|
||||
id<MTLAccelerationStructure> make_null_BLAS(id<MTLDevice> device, id<MTLCommandQueue> queue)
|
||||
{
|
||||
if (@available(macos 12.0, *)) {
|
||||
MTLResourceOptions storage_mode = MTLResourceStorageModeManaged;
|
||||
if (device.hasUnifiedMemory) {
|
||||
storage_mode = MTLResourceStorageModeShared;
|
||||
}
|
||||
|
||||
id<MTLBuffer> nullBuf = [device newBufferWithLength:0 options:storage_mode];
|
||||
|
||||
/* Create an acceleration structure. */
|
||||
MTLAccelerationStructureTriangleGeometryDescriptor *geomDesc =
|
||||
[MTLAccelerationStructureTriangleGeometryDescriptor descriptor];
|
||||
geomDesc.vertexBuffer = nullBuf;
|
||||
geomDesc.vertexBufferOffset = 0;
|
||||
geomDesc.vertexStride = sizeof(float3);
|
||||
geomDesc.indexBuffer = nullBuf;
|
||||
geomDesc.indexBufferOffset = 0;
|
||||
geomDesc.indexType = MTLIndexTypeUInt32;
|
||||
geomDesc.triangleCount = 0;
|
||||
geomDesc.intersectionFunctionTableOffset = 0;
|
||||
geomDesc.opaque = true;
|
||||
geomDesc.allowDuplicateIntersectionFunctionInvocation = false;
|
||||
|
||||
MTLPrimitiveAccelerationStructureDescriptor *accelDesc =
|
||||
[MTLPrimitiveAccelerationStructureDescriptor descriptor];
|
||||
accelDesc.geometryDescriptors = @[ geomDesc ];
|
||||
accelDesc.usage |= MTLAccelerationStructureUsageExtendedLimits;
|
||||
|
||||
MTLAccelerationStructureSizes accelSizes = [device
|
||||
accelerationStructureSizesWithDescriptor:accelDesc];
|
||||
id<MTLAccelerationStructure> accel_struct = [device
|
||||
newAccelerationStructureWithSize:accelSizes.accelerationStructureSize];
|
||||
id<MTLBuffer> scratchBuf = [device newBufferWithLength:accelSizes.buildScratchBufferSize
|
||||
options:MTLResourceStorageModePrivate];
|
||||
id<MTLBuffer> sizeBuf = [device newBufferWithLength:8 options:MTLResourceStorageModeShared];
|
||||
id<MTLCommandBuffer> accelCommands = [queue commandBuffer];
|
||||
id<MTLAccelerationStructureCommandEncoder> accelEnc =
|
||||
[accelCommands accelerationStructureCommandEncoder];
|
||||
[accelEnc buildAccelerationStructure:accel_struct
|
||||
descriptor:accelDesc
|
||||
scratchBuffer:scratchBuf
|
||||
scratchBufferOffset:0];
|
||||
[accelEnc endEncoding];
|
||||
[accelCommands commit];
|
||||
[accelCommands waitUntilCompleted];
|
||||
|
||||
/* free temp resources */
|
||||
[scratchBuf release];
|
||||
[nullBuf release];
|
||||
[sizeBuf release];
|
||||
|
||||
return accel_struct;
|
||||
}
|
||||
}
|
||||
|
||||
bool BVHMetal::build_BLAS_mesh(Progress &progress,
|
||||
id<MTLDevice> device,
|
||||
id<MTLCommandQueue> queue,
|
||||
@ -1024,6 +968,60 @@ bool BVHMetal::build_TLAS(Progress &progress,
|
||||
g_bvh_build_throttler.wait_for_all();
|
||||
|
||||
if (@available(macos 12.0, *)) {
|
||||
/* Defined inside available check, for return type to be available. */
|
||||
auto make_null_BLAS = [](id<MTLDevice> device,
|
||||
id<MTLCommandQueue> queue) -> id<MTLAccelerationStructure> {
|
||||
MTLResourceOptions storage_mode = MTLResourceStorageModeManaged;
|
||||
if (device.hasUnifiedMemory) {
|
||||
storage_mode = MTLResourceStorageModeShared;
|
||||
}
|
||||
|
||||
id<MTLBuffer> nullBuf = [device newBufferWithLength:0 options:storage_mode];
|
||||
|
||||
/* Create an acceleration structure. */
|
||||
MTLAccelerationStructureTriangleGeometryDescriptor *geomDesc =
|
||||
[MTLAccelerationStructureTriangleGeometryDescriptor descriptor];
|
||||
geomDesc.vertexBuffer = nullBuf;
|
||||
geomDesc.vertexBufferOffset = 0;
|
||||
geomDesc.vertexStride = sizeof(float3);
|
||||
geomDesc.indexBuffer = nullBuf;
|
||||
geomDesc.indexBufferOffset = 0;
|
||||
geomDesc.indexType = MTLIndexTypeUInt32;
|
||||
geomDesc.triangleCount = 0;
|
||||
geomDesc.intersectionFunctionTableOffset = 0;
|
||||
geomDesc.opaque = true;
|
||||
geomDesc.allowDuplicateIntersectionFunctionInvocation = false;
|
||||
|
||||
MTLPrimitiveAccelerationStructureDescriptor *accelDesc =
|
||||
[MTLPrimitiveAccelerationStructureDescriptor descriptor];
|
||||
accelDesc.geometryDescriptors = @[ geomDesc ];
|
||||
accelDesc.usage |= MTLAccelerationStructureUsageExtendedLimits;
|
||||
|
||||
MTLAccelerationStructureSizes accelSizes = [device
|
||||
accelerationStructureSizesWithDescriptor:accelDesc];
|
||||
id<MTLAccelerationStructure> accel_struct = [device
|
||||
newAccelerationStructureWithSize:accelSizes.accelerationStructureSize];
|
||||
id<MTLBuffer> scratchBuf = [device newBufferWithLength:accelSizes.buildScratchBufferSize
|
||||
options:MTLResourceStorageModePrivate];
|
||||
id<MTLBuffer> sizeBuf = [device newBufferWithLength:8 options:MTLResourceStorageModeShared];
|
||||
id<MTLCommandBuffer> accelCommands = [queue commandBuffer];
|
||||
id<MTLAccelerationStructureCommandEncoder> accelEnc =
|
||||
[accelCommands accelerationStructureCommandEncoder];
|
||||
[accelEnc buildAccelerationStructure:accel_struct
|
||||
descriptor:accelDesc
|
||||
scratchBuffer:scratchBuf
|
||||
scratchBufferOffset:0];
|
||||
[accelEnc endEncoding];
|
||||
[accelCommands commit];
|
||||
[accelCommands waitUntilCompleted];
|
||||
|
||||
/* free temp resources */
|
||||
[scratchBuf release];
|
||||
[nullBuf release];
|
||||
[sizeBuf release];
|
||||
|
||||
return accel_struct;
|
||||
};
|
||||
|
||||
uint32_t num_instances = 0;
|
||||
uint32_t num_motion_transforms = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user