mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 20:52:36 +01:00
Cleanup.
This commit is contained in:
@@ -79,6 +79,28 @@
|
|||||||
#define MTL_RELEASE_W(_obj, _expected) _MTL_RELEASE(_obj, _expected, BX_WARN)
|
#define MTL_RELEASE_W(_obj, _expected) _MTL_RELEASE(_obj, _expected, BX_WARN)
|
||||||
#define MTL_RELEASE_I(_obj) _MTL_RELEASE(_obj, 0, BX_NOOP)
|
#define MTL_RELEASE_I(_obj) _MTL_RELEASE(_obj, 0, BX_NOOP)
|
||||||
|
|
||||||
|
// C++ wrapper
|
||||||
|
// Objects with creation functions starting with 'new' has a refcount 1 after creation, object
|
||||||
|
// must be destroyed with release. commandBuffer, commandEncoders are autoreleased objects.
|
||||||
|
// Needs AutoreleasePool!
|
||||||
|
#define MTL_CLASS(_className) \
|
||||||
|
class _className \
|
||||||
|
{ \
|
||||||
|
public: \
|
||||||
|
_className(id<MTL##_className> _obj = NULL) \
|
||||||
|
: m_obj(_obj) \
|
||||||
|
{ \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
operator id<MTL##_className>() const \
|
||||||
|
{ \
|
||||||
|
return m_obj; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
id<MTL##_className> m_obj;
|
||||||
|
|
||||||
|
#define MTL_CLASS_END };
|
||||||
|
|
||||||
namespace bgfx { namespace mtl
|
namespace bgfx { namespace mtl
|
||||||
{
|
{
|
||||||
// Metal API has obnoxious "availability" annotations on enums causing build errors when
|
// Metal API has obnoxious "availability" annotations on enums causing build errors when
|
||||||
@@ -253,20 +275,6 @@ namespace bgfx { namespace mtl
|
|||||||
#endif // BX_PLATFORM_OSX
|
#endif // BX_PLATFORM_OSX
|
||||||
}
|
}
|
||||||
|
|
||||||
// c++ wrapper
|
|
||||||
// objects with creation functions starting with 'new' has a refcount 1 after creation, object must be destroyed with release.
|
|
||||||
// commandBuffer, commandEncoders are autoreleased objects. Needs AutoreleasePool!
|
|
||||||
|
|
||||||
#define MTL_CLASS(name) \
|
|
||||||
class name \
|
|
||||||
{ \
|
|
||||||
public: \
|
|
||||||
name(id<MTL##name> _obj = NULL) : m_obj(_obj) {} \
|
|
||||||
operator id<MTL##name>() const { return m_obj; } \
|
|
||||||
id<MTL##name> m_obj;
|
|
||||||
|
|
||||||
#define MTL_CLASS_END };
|
|
||||||
|
|
||||||
typedef void (*mtlCallback)(void* userData);
|
typedef void (*mtlCallback)(void* userData);
|
||||||
|
|
||||||
MTL_CLASS(BlitCommandEncoder)
|
MTL_CLASS(BlitCommandEncoder)
|
||||||
@@ -282,8 +290,17 @@ namespace bgfx { namespace mtl
|
|||||||
, MTLOrigin _destinationOrigin
|
, MTLOrigin _destinationOrigin
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
[m_obj copyFromTexture:_sourceTexture sourceSlice:_sourceSlice sourceLevel:_sourceLevel sourceOrigin:_sourceOrigin sourceSize:_sourceSize
|
[m_obj
|
||||||
toTexture:_destinationTexture destinationSlice:_destinationSlice destinationLevel:_destinationLevel destinationOrigin:_destinationOrigin];
|
copyFromTexture: _sourceTexture
|
||||||
|
sourceSlice: _sourceSlice
|
||||||
|
sourceLevel: _sourceLevel
|
||||||
|
sourceOrigin: _sourceOrigin
|
||||||
|
sourceSize: _sourceSize
|
||||||
|
toTexture: _destinationTexture
|
||||||
|
destinationSlice: _destinationSlice
|
||||||
|
destinationLevel: _destinationLevel
|
||||||
|
destinationOrigin: _destinationOrigin
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void copyFromBuffer(
|
void copyFromBuffer(
|
||||||
@@ -294,8 +311,13 @@ namespace bgfx { namespace mtl
|
|||||||
, NSUInteger _size
|
, NSUInteger _size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
[m_obj copyFromBuffer:_sourceBuffer sourceOffset:_sourceOffset toBuffer:_destinationBuffer
|
[m_obj
|
||||||
destinationOffset:_destinationOffset size:_size];
|
copyFromBuffer: _sourceBuffer
|
||||||
|
sourceOffset: _sourceOffset
|
||||||
|
toBuffer: _destinationBuffer
|
||||||
|
destinationOffset: _destinationOffset
|
||||||
|
size: _size
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void copyFromBuffer(
|
void copyFromBuffer(
|
||||||
@@ -310,25 +332,37 @@ namespace bgfx { namespace mtl
|
|||||||
, MTLOrigin _destinationOrigin
|
, MTLOrigin _destinationOrigin
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
[m_obj copyFromBuffer:_sourceBuffer sourceOffset:_sourceOffset sourceBytesPerRow:_sourceBytesPerRow
|
[m_obj
|
||||||
sourceBytesPerImage:_sourceBytesPerImage sourceSize:_sourceSize toTexture:_destinationTexture
|
copyFromBuffer: _sourceBuffer
|
||||||
destinationSlice:_destinationSlice destinationLevel:_destinationLevel destinationOrigin:_destinationOrigin];
|
sourceOffset: _sourceOffset
|
||||||
|
sourceBytesPerRow: _sourceBytesPerRow
|
||||||
|
sourceBytesPerImage: _sourceBytesPerImage
|
||||||
|
sourceSize: _sourceSize
|
||||||
|
toTexture: _destinationTexture
|
||||||
|
destinationSlice: _destinationSlice
|
||||||
|
destinationLevel: _destinationLevel
|
||||||
|
destinationOrigin: _destinationOrigin
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateMipmapsForTexture(id<MTLTexture> _texture)
|
void generateMipmapsForTexture(id<MTLTexture> _texture)
|
||||||
{
|
{
|
||||||
[m_obj generateMipmapsForTexture:_texture];
|
[m_obj generateMipmapsForTexture: _texture];
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BX_PLATFORM_OSX
|
#if BX_PLATFORM_OSX
|
||||||
void synchronizeTexture(id<MTLTexture> _texture, NSUInteger _slice, NSUInteger _level)
|
void synchronizeTexture(id<MTLTexture> _texture, NSUInteger _slice, NSUInteger _level)
|
||||||
{
|
{
|
||||||
[m_obj synchronizeTexture:_texture slice:_slice level:_level];
|
[m_obj
|
||||||
|
synchronizeTexture: _texture
|
||||||
|
slice: _slice
|
||||||
|
level: _level
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void synchronizeResource(id<MTLResource> _resource)
|
void synchronizeResource(id<MTLResource> _resource)
|
||||||
{
|
{
|
||||||
[m_obj synchronizeResource:_resource];
|
[m_obj synchronizeResource: _resource];
|
||||||
}
|
}
|
||||||
#endif // BX_PLATFORM_OSX
|
#endif // BX_PLATFORM_OSX
|
||||||
|
|
||||||
@@ -360,8 +394,9 @@ namespace bgfx { namespace mtl
|
|||||||
|
|
||||||
MTL_CLASS(CommandBuffer)
|
MTL_CLASS(CommandBuffer)
|
||||||
// Creating Command Encoders
|
// Creating Command Encoders
|
||||||
id<MTLRenderCommandEncoder> renderCommandEncoderWithDescriptor(MTLRenderPassDescriptor* _renderPassDescriptor){
|
id<MTLRenderCommandEncoder> renderCommandEncoderWithDescriptor(MTLRenderPassDescriptor* _renderPassDescriptor)
|
||||||
return [m_obj renderCommandEncoderWithDescriptor:_renderPassDescriptor];
|
{
|
||||||
|
return [m_obj renderCommandEncoderWithDescriptor: _renderPassDescriptor];
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLComputeCommandEncoder> computeCommandEncoder()
|
id<MTLComputeCommandEncoder> computeCommandEncoder()
|
||||||
@@ -387,17 +422,27 @@ namespace bgfx { namespace mtl
|
|||||||
|
|
||||||
void addScheduledHandler(mtlCallback _cb, void* _data)
|
void addScheduledHandler(mtlCallback _cb, void* _data)
|
||||||
{
|
{
|
||||||
[m_obj addScheduledHandler:^(id<MTLCommandBuffer>){ _cb(_data); }];
|
[m_obj
|
||||||
|
addScheduledHandler: ^(id<MTLCommandBuffer>)
|
||||||
|
{
|
||||||
|
_cb(_data);
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void addCompletedHandler(mtlCallback _cb, void* _data)
|
void addCompletedHandler(mtlCallback _cb, void* _data)
|
||||||
{
|
{
|
||||||
[m_obj addCompletedHandler:^(id<MTLCommandBuffer>){ _cb(_data); }];
|
[m_obj
|
||||||
|
addCompletedHandler: ^(id<MTLCommandBuffer>)
|
||||||
|
{
|
||||||
|
_cb(_data);
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void presentDrawable(id<MTLDrawable> _drawable)
|
void presentDrawable(id<MTLDrawable> _drawable)
|
||||||
{
|
{
|
||||||
[m_obj presentDrawable:_drawable];
|
[m_obj presentDrawable: _drawable];
|
||||||
}
|
}
|
||||||
|
|
||||||
void waitUntilCompleted()
|
void waitUntilCompleted()
|
||||||
@@ -421,27 +466,27 @@ namespace bgfx { namespace mtl
|
|||||||
MTL_CLASS(ComputeCommandEncoder)
|
MTL_CLASS(ComputeCommandEncoder)
|
||||||
void setComputePipelineState(id<MTLComputePipelineState> _state)
|
void setComputePipelineState(id<MTLComputePipelineState> _state)
|
||||||
{
|
{
|
||||||
[m_obj setComputePipelineState:_state];
|
[m_obj setComputePipelineState: _state];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
void setBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setBuffer:_buffer offset:_offset atIndex:_index];
|
[m_obj setBuffer: _buffer offset: _offset atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTexture(id<MTLTexture> _texture, NSUInteger _index)
|
void setTexture(id<MTLTexture> _texture, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setTexture:_texture atIndex:_index];
|
[m_obj setTexture: _texture atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
void setSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setSamplerState:_sampler atIndex:_index];
|
[m_obj setSamplerState: _sampler atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatchThreadgroups(MTLSize _threadgroupsPerGrid, MTLSize _threadsPerThreadgroup)
|
void dispatchThreadgroups(MTLSize _threadgroupsPerGrid, MTLSize _threadsPerThreadgroup)
|
||||||
{
|
{
|
||||||
[m_obj dispatchThreadgroups:_threadgroupsPerGrid threadsPerThreadgroup:_threadsPerThreadgroup];
|
[m_obj dispatchThreadgroups: _threadgroupsPerGrid threadsPerThreadgroup: _threadsPerThreadgroup];
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatchThreadgroupsWithIndirectBuffer(
|
void dispatchThreadgroupsWithIndirectBuffer(
|
||||||
@@ -450,7 +495,11 @@ namespace bgfx { namespace mtl
|
|||||||
, MTLSize _threadsPerThreadgroup
|
, MTLSize _threadsPerThreadgroup
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
[m_obj dispatchThreadgroupsWithIndirectBuffer:_indirectBuffer indirectBufferOffset:_indirectBufferOffset threadsPerThreadgroup:_threadsPerThreadgroup];
|
[m_obj
|
||||||
|
dispatchThreadgroupsWithIndirectBuffer: _indirectBuffer
|
||||||
|
indirectBufferOffset: _indirectBufferOffset
|
||||||
|
threadsPerThreadgroup: _threadsPerThreadgroup
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void endEncoding()
|
void endEncoding()
|
||||||
@@ -472,7 +521,12 @@ namespace bgfx { namespace mtl
|
|||||||
MTL_CLASS(Device)
|
MTL_CLASS(Device)
|
||||||
bool supportsFamily(MTLGPUFamily _featureSet)
|
bool supportsFamily(MTLGPUFamily _featureSet)
|
||||||
{
|
{
|
||||||
return [m_obj supportsFamily:_featureSet];
|
if ([m_obj respondsToSelector: @selector(supportsFamily:)])
|
||||||
|
{
|
||||||
|
return [m_obj supportsFamily: _featureSet];
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLLibrary> newLibraryWithData(const void* _data)
|
id<MTLLibrary> newLibraryWithData(const void* _data)
|
||||||
@@ -504,40 +558,57 @@ namespace bgfx { namespace mtl
|
|||||||
|
|
||||||
id<MTLCommandQueue> newCommandQueueWithMaxCommandBufferCount(NSUInteger _maxCommandBufferCount)
|
id<MTLCommandQueue> newCommandQueueWithMaxCommandBufferCount(NSUInteger _maxCommandBufferCount)
|
||||||
{
|
{
|
||||||
return [m_obj newCommandQueueWithMaxCommandBufferCount:_maxCommandBufferCount];
|
return [m_obj newCommandQueueWithMaxCommandBufferCount: _maxCommandBufferCount];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creating Resources
|
// Creating Resources
|
||||||
id<MTLBuffer> newBufferWithLength(unsigned int _length, MTLResourceOptions _options)
|
id<MTLBuffer> newBufferWithLength(unsigned int _length, MTLResourceOptions _options)
|
||||||
{
|
{
|
||||||
return [m_obj newBufferWithLength:_length options:_options ];
|
return [m_obj
|
||||||
|
newBufferWithLength: _length
|
||||||
|
options: _options
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLBuffer> newBufferWithBytes(const void* _pointer, NSUInteger _length, MTLResourceOptions _options)
|
id<MTLBuffer> newBufferWithBytes(const void* _pointer, NSUInteger _length, MTLResourceOptions _options)
|
||||||
{
|
{
|
||||||
return [m_obj newBufferWithBytes:_pointer length:_length options:_options];
|
return [m_obj
|
||||||
|
newBufferWithBytes: _pointer
|
||||||
|
length: _length
|
||||||
|
options: _options
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLTexture> newTextureWithDescriptor(MTLTextureDescriptor* _descriptor)
|
id<MTLTexture> newTextureWithDescriptor(MTLTextureDescriptor* _descriptor)
|
||||||
{
|
{
|
||||||
return [m_obj newTextureWithDescriptor:_descriptor];
|
return [m_obj
|
||||||
|
newTextureWithDescriptor: _descriptor
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLSamplerState> newSamplerStateWithDescriptor(MTLSamplerDescriptor* _descriptor)
|
id<MTLSamplerState> newSamplerStateWithDescriptor(MTLSamplerDescriptor* _descriptor)
|
||||||
{
|
{
|
||||||
return [m_obj newSamplerStateWithDescriptor:_descriptor];
|
return [m_obj
|
||||||
|
newSamplerStateWithDescriptor: _descriptor
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creating Command Objects Needed to Render Graphics
|
// Creating Command Objects Needed to Render Graphics
|
||||||
id<MTLDepthStencilState> newDepthStencilStateWithDescriptor(MTLDepthStencilDescriptor* _descriptor)
|
id<MTLDepthStencilState> newDepthStencilStateWithDescriptor(MTLDepthStencilDescriptor* _descriptor)
|
||||||
{
|
{
|
||||||
return [m_obj newDepthStencilStateWithDescriptor:_descriptor];
|
return [m_obj
|
||||||
|
newDepthStencilStateWithDescriptor: _descriptor
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLRenderPipelineState> newRenderPipelineStateWithDescriptor(MTLRenderPipelineDescriptor* _descriptor)
|
id<MTLRenderPipelineState> newRenderPipelineStateWithDescriptor(MTLRenderPipelineDescriptor* _descriptor)
|
||||||
{
|
{
|
||||||
NSError* error;
|
NSError* error;
|
||||||
id<MTLRenderPipelineState> state = [m_obj newRenderPipelineStateWithDescriptor:_descriptor error:&error];
|
id<MTLRenderPipelineState> state = [m_obj
|
||||||
|
newRenderPipelineStateWithDescriptor: _descriptor
|
||||||
|
error: &error
|
||||||
|
];
|
||||||
|
|
||||||
BX_WARN(NULL == error
|
BX_WARN(NULL == error
|
||||||
, "newRenderPipelineStateWithDescriptor failed: %s"
|
, "newRenderPipelineStateWithDescriptor failed: %s"
|
||||||
, [error.localizedDescription cStringUsingEncoding:NSASCIIStringEncoding]
|
, [error.localizedDescription cStringUsingEncoding:NSASCIIStringEncoding]
|
||||||
@@ -552,7 +623,12 @@ namespace bgfx { namespace mtl
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
NSError* error;
|
NSError* error;
|
||||||
id<MTLRenderPipelineState> state = [m_obj newRenderPipelineStateWithDescriptor:_descriptor options:_options reflection:_reflection error:&error];
|
id<MTLRenderPipelineState> state = [m_obj
|
||||||
|
newRenderPipelineStateWithDescriptor: _descriptor
|
||||||
|
options: _options
|
||||||
|
reflection: _reflection
|
||||||
|
error: &error
|
||||||
|
];
|
||||||
|
|
||||||
BX_WARN(NULL == error
|
BX_WARN(NULL == error
|
||||||
, "newRenderPipelineStateWithDescriptor failed: %s"
|
, "newRenderPipelineStateWithDescriptor failed: %s"
|
||||||
@@ -569,7 +645,12 @@ namespace bgfx { namespace mtl
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
NSError* error;
|
NSError* error;
|
||||||
id<MTLComputePipelineState> state = [m_obj newComputePipelineStateWithFunction:_computeFunction options:_options reflection:_reflection error:&error];
|
id<MTLComputePipelineState> state = [m_obj
|
||||||
|
newComputePipelineStateWithFunction: _computeFunction
|
||||||
|
options: _options
|
||||||
|
reflection: _reflection
|
||||||
|
error: &error
|
||||||
|
];
|
||||||
|
|
||||||
BX_WARN(NULL == error
|
BX_WARN(NULL == error
|
||||||
, "newComputePipelineStateWithFunction failed: %s"
|
, "newComputePipelineStateWithFunction failed: %s"
|
||||||
@@ -578,16 +659,17 @@ namespace bgfx { namespace mtl
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool supportsTextureSampleCount(int sampleCount)
|
bool supportsTextureSampleCount(int32_t sampleCount)
|
||||||
{
|
{
|
||||||
if (BX_ENABLED(BX_PLATFORM_IOS) && !iOSVersionEqualOrGreater("9.0.0") )
|
if (BX_ENABLED(BX_PLATFORM_IOS) && !iOSVersionEqualOrGreater("9.0.0") )
|
||||||
{
|
{
|
||||||
return sampleCount == 1 || sampleCount == 2 || sampleCount == 4;
|
return sampleCount == 1
|
||||||
}
|
|| sampleCount == 2
|
||||||
else
|
|| sampleCount == 4
|
||||||
{
|
;
|
||||||
return [m_obj supportsTextureSampleCount:sampleCount];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return [m_obj supportsTextureSampleCount:sampleCount];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool depth24Stencil8PixelFormatSupported()
|
bool depth24Stencil8PixelFormatSupported()
|
||||||
@@ -601,6 +683,7 @@ namespace bgfx { namespace mtl
|
|||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
MTL_CLASS(Function)
|
MTL_CLASS(Function)
|
||||||
|
|
||||||
NSArray* vertexAttributes()
|
NSArray* vertexAttributes()
|
||||||
{
|
{
|
||||||
return m_obj.vertexAttributes;
|
return m_obj.vertexAttributes;
|
||||||
@@ -627,99 +710,113 @@ namespace bgfx { namespace mtl
|
|||||||
// Setting Graphics Rendering State
|
// Setting Graphics Rendering State
|
||||||
void setBlendColor(float _red, float _green, float _blue, float _alpha)
|
void setBlendColor(float _red, float _green, float _blue, float _alpha)
|
||||||
{
|
{
|
||||||
[m_obj setBlendColorRed:_red green:_green blue:_blue alpha:_alpha];
|
[m_obj
|
||||||
|
setBlendColorRed: _red
|
||||||
|
green: _green
|
||||||
|
blue: _blue
|
||||||
|
alpha: _alpha
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVertexAmplificationCount(NSUInteger count, MTLVertexAmplificationViewMapping* viewMappings)
|
void setVertexAmplificationCount(NSUInteger _count, MTLVertexAmplificationViewMapping* _viewMappings)
|
||||||
{
|
{
|
||||||
[m_obj setVertexAmplificationCount:count viewMappings:viewMappings];
|
[m_obj
|
||||||
|
setVertexAmplificationCount: _count
|
||||||
|
viewMappings: _viewMappings
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setCullMode(MTLCullMode _cullMode)
|
void setCullMode(MTLCullMode _cullMode)
|
||||||
{
|
{
|
||||||
[m_obj setCullMode:_cullMode];
|
[m_obj setCullMode: _cullMode];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDepthBias(float _depthBias, float _slopeScale, float _clamp)
|
void setDepthBias(float _depthBias, float _slopeScale, float _clamp)
|
||||||
{
|
{
|
||||||
[m_obj setDepthBias:_depthBias slopeScale:_slopeScale clamp:_clamp];
|
[m_obj setDepthBias: _depthBias slopeScale: _slopeScale clamp: _clamp];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDepthStencilState(id<MTLDepthStencilState> _depthStencilState)
|
void setDepthStencilState(id<MTLDepthStencilState> _depthStencilState)
|
||||||
{
|
{
|
||||||
[m_obj setDepthStencilState:_depthStencilState];
|
[m_obj setDepthStencilState: _depthStencilState];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setFrontFacingWinding(MTLWinding _frontFacingWinding)
|
void setFrontFacingWinding(MTLWinding _frontFacingWinding)
|
||||||
{
|
{
|
||||||
[m_obj setFrontFacingWinding:_frontFacingWinding];
|
[m_obj setFrontFacingWinding: _frontFacingWinding];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setRenderPipelineState(id<MTLRenderPipelineState> _pipelineState)
|
void setRenderPipelineState(id<MTLRenderPipelineState> _pipelineState)
|
||||||
{
|
{
|
||||||
[m_obj setRenderPipelineState:_pipelineState];
|
[m_obj setRenderPipelineState: _pipelineState];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setScissorRect(MTLScissorRect _rect)
|
void setScissorRect(MTLScissorRect _rect)
|
||||||
{
|
{
|
||||||
[m_obj setScissorRect:_rect];
|
[m_obj setScissorRect: _rect];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setStencilReferenceValue(uint32_t _ref)
|
void setStencilReferenceValue(uint32_t _ref)
|
||||||
{
|
{
|
||||||
[m_obj setStencilReferenceValue:_ref];
|
[m_obj setStencilReferenceValue: _ref];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTriangleFillMode(MTLTriangleFillMode _fillMode)
|
void setTriangleFillMode(MTLTriangleFillMode _fillMode)
|
||||||
{
|
{
|
||||||
[m_obj setTriangleFillMode:_fillMode];
|
[m_obj setTriangleFillMode: _fillMode];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setViewport(MTLViewport _viewport)
|
void setViewport(MTLViewport _viewport)
|
||||||
{
|
{
|
||||||
[m_obj setViewport:_viewport];
|
[m_obj setViewport: _viewport];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setViewports(MTLViewport _viewport[], NSInteger count)
|
void setViewports(MTLViewport _viewport[], NSInteger _count)
|
||||||
{
|
{
|
||||||
[m_obj setViewports:_viewport count:count];
|
[m_obj
|
||||||
|
setViewports: _viewport
|
||||||
|
count: _count
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVisibilityResultMode(MTLVisibilityResultMode _mode, NSUInteger _offset)
|
void setVisibilityResultMode(MTLVisibilityResultMode _mode, NSUInteger _offset)
|
||||||
{
|
{
|
||||||
[m_obj setVisibilityResultMode:_mode offset:_offset];
|
[m_obj
|
||||||
|
setVisibilityResultMode: _mode
|
||||||
|
offset: _offset
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specifying Resources for a Vertex Function
|
// Specifying Resources for a Vertex Function
|
||||||
void setVertexBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
void setVertexBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setVertexBuffer:_buffer offset:_offset atIndex:_index];
|
[m_obj setVertexBuffer: _buffer offset: _offset atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVertexSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
void setVertexSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setVertexSamplerState:_sampler atIndex:_index];
|
[m_obj setVertexSamplerState: _sampler atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVertexTexture(id<MTLTexture> _texture, NSUInteger _index)
|
void setVertexTexture(id<MTLTexture> _texture, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setVertexTexture:_texture atIndex:_index];
|
[m_obj setVertexTexture: _texture atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specifying Resources for a Fragment Function
|
// Specifying Resources for a Fragment Function
|
||||||
void setFragmentBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
void setFragmentBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setFragmentBuffer:_buffer offset:_offset atIndex:_index];
|
[m_obj setFragmentBuffer: _buffer offset: _offset atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setFragmentSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
void setFragmentSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setFragmentSamplerState:_sampler atIndex:_index];
|
[m_obj setFragmentSamplerState: _sampler atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setFragmentTexture(id<MTLTexture> _texture, NSUInteger _index)
|
void setFragmentTexture(id<MTLTexture> _texture, NSUInteger _index)
|
||||||
{
|
{
|
||||||
[m_obj setFragmentTexture:_texture atIndex:_index];
|
[m_obj setFragmentTexture: _texture atIndex: _index];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Drawing Geometric Primitives
|
//Drawing Geometric Primitives
|
||||||
@@ -733,7 +830,14 @@ namespace bgfx { namespace mtl
|
|||||||
, NSUInteger _instanceCount
|
, NSUInteger _instanceCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
[m_obj drawIndexedPrimitives:_primitiveType indexCount:_indexCount indexType:_indexType indexBuffer:_indexBuffer indexBufferOffset:_indexBufferOffset instanceCount:_instanceCount];
|
[m_obj
|
||||||
|
drawIndexedPrimitives: _primitiveType
|
||||||
|
indexCount: _indexCount
|
||||||
|
indexType: _indexType
|
||||||
|
indexBuffer: _indexBuffer
|
||||||
|
indexBufferOffset: _indexBufferOffset
|
||||||
|
instanceCount: _instanceCount
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawPrimitives(
|
void drawPrimitives(
|
||||||
@@ -743,7 +847,12 @@ namespace bgfx { namespace mtl
|
|||||||
, NSUInteger _instanceCount
|
, NSUInteger _instanceCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
[m_obj drawPrimitives:_primitiveType vertexStart:_vertexStart vertexCount:_vertexCount instanceCount:_instanceCount];
|
[m_obj
|
||||||
|
drawPrimitives: _primitiveType
|
||||||
|
vertexStart: _vertexStart
|
||||||
|
vertexCount: _vertexCount
|
||||||
|
instanceCount: _instanceCount
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawPrimitives(
|
void drawPrimitives(
|
||||||
@@ -751,7 +860,11 @@ namespace bgfx { namespace mtl
|
|||||||
, id<MTLBuffer> _indirectBuffer
|
, id<MTLBuffer> _indirectBuffer
|
||||||
, NSUInteger _indirectBufferOffset)
|
, NSUInteger _indirectBufferOffset)
|
||||||
{
|
{
|
||||||
[m_obj drawPrimitives:_primitiveType indirectBuffer:_indirectBuffer indirectBufferOffset:_indirectBufferOffset];
|
[m_obj
|
||||||
|
drawPrimitives: _primitiveType
|
||||||
|
indirectBuffer: _indirectBuffer
|
||||||
|
indirectBufferOffset: _indirectBufferOffset
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawIndexedPrimitives(
|
void drawIndexedPrimitives(
|
||||||
@@ -762,7 +875,14 @@ namespace bgfx { namespace mtl
|
|||||||
, id<MTLBuffer> _indirectBuffer
|
, id<MTLBuffer> _indirectBuffer
|
||||||
, NSUInteger _indirectBufferOffset)
|
, NSUInteger _indirectBufferOffset)
|
||||||
{
|
{
|
||||||
[m_obj drawIndexedPrimitives:_primitiveType indexType:_indexType indexBuffer:_indexBuffer indexBufferOffset:_indexBufferOffset indirectBuffer:_indirectBuffer indirectBufferOffset:_indirectBufferOffset];
|
[m_obj
|
||||||
|
drawIndexedPrimitives: _primitiveType
|
||||||
|
indexType: _indexType
|
||||||
|
indexBuffer: _indexBuffer
|
||||||
|
indexBufferOffset: _indexBufferOffset
|
||||||
|
indirectBuffer: _indirectBuffer
|
||||||
|
indirectBufferOffset: _indirectBufferOffset
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
void insertDebugSignpost(const char* _string)
|
void insertDebugSignpost(const char* _string)
|
||||||
@@ -788,29 +908,66 @@ namespace bgfx { namespace mtl
|
|||||||
|
|
||||||
MTL_CLASS(Texture)
|
MTL_CLASS(Texture)
|
||||||
// Copying Data into a Texture Image
|
// Copying Data into a Texture Image
|
||||||
void replaceRegion(MTLRegion _region, NSUInteger _level, NSUInteger _slice, const void* _pixelBytes, NSUInteger _bytesPerRow, NSUInteger _bytesPerImage)
|
void replaceRegion(
|
||||||
|
MTLRegion _region
|
||||||
|
, NSUInteger _level
|
||||||
|
, NSUInteger _slice
|
||||||
|
, const void* _pixelBytes
|
||||||
|
, NSUInteger _bytesPerRow
|
||||||
|
, NSUInteger _bytesPerImage
|
||||||
|
)
|
||||||
{
|
{
|
||||||
[m_obj replaceRegion:_region mipmapLevel:_level slice:_slice withBytes:_pixelBytes bytesPerRow:_bytesPerRow bytesPerImage:_bytesPerImage];
|
[m_obj
|
||||||
|
replaceRegion: _region
|
||||||
|
mipmapLevel: _level
|
||||||
|
slice: _slice
|
||||||
|
withBytes: _pixelBytes
|
||||||
|
bytesPerRow: _bytesPerRow
|
||||||
|
bytesPerImage: _bytesPerImage
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copying Data from a Texture Image
|
// Copying Data from a Texture Image
|
||||||
void getBytes(void* _pixelBytes, NSUInteger _bytesPerRow, NSUInteger _bytesPerImage, MTLRegion _region, NSUInteger _mipmapLevel, NSUInteger _slice) const
|
void getBytes(
|
||||||
|
void* _pixelBytes
|
||||||
|
, NSUInteger _bytesPerRow
|
||||||
|
, NSUInteger _bytesPerImage
|
||||||
|
, MTLRegion _region
|
||||||
|
, NSUInteger _mipmapLevel
|
||||||
|
, NSUInteger _slice
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
[m_obj getBytes:_pixelBytes bytesPerRow:_bytesPerRow bytesPerImage:_bytesPerImage fromRegion:_region mipmapLevel:_mipmapLevel slice:_slice];
|
[m_obj
|
||||||
|
getBytes: _pixelBytes
|
||||||
|
bytesPerRow: _bytesPerRow
|
||||||
|
bytesPerImage: _bytesPerImage
|
||||||
|
fromRegion: _region
|
||||||
|
mipmapLevel: _mipmapLevel
|
||||||
|
slice: _slice
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creating Textures by Reusing Image Data
|
// Creating Textures by Reusing Image Data
|
||||||
id<MTLTexture> newTextureViewWithPixelFormat(MTLPixelFormat _pixelFormat)
|
id<MTLTexture> newTextureViewWithPixelFormat(MTLPixelFormat _pixelFormat)
|
||||||
{
|
{
|
||||||
return [m_obj newTextureViewWithPixelFormat:_pixelFormat];
|
return [m_obj newTextureViewWithPixelFormat: _pixelFormat];
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLTexture> newTextureViewWithPixelFormat(MTLPixelFormat _pixelFormat, MTLTextureType _textureType, NSRange _levelRange, NSRange _sliceRange)
|
id<MTLTexture> newTextureViewWithPixelFormat(
|
||||||
|
MTLPixelFormat _pixelFormat
|
||||||
|
, MTLTextureType _textureType
|
||||||
|
, NSRange _levelRange
|
||||||
|
, NSRange _sliceRange
|
||||||
|
)
|
||||||
{
|
{
|
||||||
return [m_obj newTextureViewWithPixelFormat:_pixelFormat textureType:_textureType levels:_levelRange slices:_sliceRange];
|
return [m_obj
|
||||||
|
newTextureViewWithPixelFormat: _pixelFormat
|
||||||
|
textureType: _textureType
|
||||||
|
levels: _levelRange
|
||||||
|
slices: _sliceRange
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
//properties
|
|
||||||
uint32_t width() const
|
uint32_t width() const
|
||||||
{
|
{
|
||||||
return (uint32_t)m_obj.width;
|
return (uint32_t)m_obj.width;
|
||||||
@@ -851,13 +1008,13 @@ namespace bgfx { namespace mtl
|
|||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
typedef id<MTLComputePipelineState> ComputePipelineState;
|
typedef id<MTLComputePipelineState> ComputePipelineState;
|
||||||
typedef id<MTLDepthStencilState> DepthStencilState;
|
typedef id<MTLDepthStencilState> DepthStencilState;
|
||||||
typedef id<MTLRenderPipelineState> RenderPipelineState;
|
typedef id<MTLRenderPipelineState> RenderPipelineState;
|
||||||
typedef id<MTLSamplerState> SamplerState;
|
typedef id<MTLSamplerState> SamplerState;
|
||||||
|
|
||||||
//descriptors
|
//descriptors
|
||||||
//NOTE: [class new] is same as [[class alloc] init]
|
//NOTE: [class new] is same as [[class alloc] init]
|
||||||
typedef MTLRenderPipelineDescriptor* RenderPipelineDescriptor;
|
typedef MTLRenderPipelineDescriptor* RenderPipelineDescriptor;
|
||||||
typedef MTLComputePipelineReflection* ComputePipelineReflection;
|
typedef MTLComputePipelineReflection* ComputePipelineReflection;
|
||||||
|
|
||||||
inline RenderPipelineDescriptor newRenderPipelineDescriptor()
|
inline RenderPipelineDescriptor newRenderPipelineDescriptor()
|
||||||
@@ -886,8 +1043,8 @@ namespace bgfx { namespace mtl
|
|||||||
return [MTLStencilDescriptor new];
|
return [MTLStencilDescriptor new];
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef MTLRenderPassColorAttachmentDescriptor* RenderPassColorAttachmentDescriptor;
|
typedef MTLRenderPassColorAttachmentDescriptor* RenderPassColorAttachmentDescriptor;
|
||||||
typedef MTLRenderPassDepthAttachmentDescriptor* RenderPassDepthAttachmentDescriptor;
|
typedef MTLRenderPassDepthAttachmentDescriptor* RenderPassDepthAttachmentDescriptor;
|
||||||
typedef MTLRenderPassStencilAttachmentDescriptor* RenderPassStencilAttachmentDescriptor;
|
typedef MTLRenderPassStencilAttachmentDescriptor* RenderPassStencilAttachmentDescriptor;
|
||||||
|
|
||||||
typedef MTLRenderPassDescriptor* RenderPassDescriptor;
|
typedef MTLRenderPassDescriptor* RenderPassDescriptor;
|
||||||
|
|||||||
@@ -516,65 +516,65 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
|
|||||||
|
|
||||||
retain(m_device);
|
retain(m_device);
|
||||||
|
|
||||||
|
if (m_device.supportsFamily(MTLGPUFamilyApple4) )
|
||||||
{
|
{
|
||||||
if ([m_device respondsToSelector: @selector(supportsFamily:)])
|
g_caps.vendorId = BGFX_PCI_ID_APPLE;
|
||||||
{
|
g_caps.deviceId = 1004;
|
||||||
if ([m_device supportsFamily: MTLGPUFamilyApple4])
|
|
||||||
{
|
|
||||||
g_caps.vendorId = BGFX_PCI_ID_APPLE;
|
|
||||||
|
|
||||||
if ([m_device supportsFamily: MTLGPUFamilyApple8])
|
if (m_device.supportsFamily(MTLGPUFamilyApple10) )
|
||||||
{
|
{
|
||||||
g_caps.deviceId = 1008;
|
g_caps.deviceId = 1010;
|
||||||
}
|
|
||||||
else if ([m_device supportsFamily: MTLGPUFamilyApple7])
|
|
||||||
{
|
|
||||||
g_caps.deviceId = 1007;
|
|
||||||
}
|
|
||||||
else if ([m_device supportsFamily: MTLGPUFamilyApple6])
|
|
||||||
{
|
|
||||||
g_caps.deviceId = 1006;
|
|
||||||
}
|
|
||||||
else if ([m_device supportsFamily: MTLGPUFamilyApple5])
|
|
||||||
{
|
|
||||||
g_caps.deviceId = 1005;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_caps.deviceId = 1004;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (m_device.supportsFamily(MTLGPUFamilyApple9) )
|
||||||
|
{
|
||||||
|
g_caps.deviceId = 1009;
|
||||||
|
}
|
||||||
|
else if (m_device.supportsFamily(MTLGPUFamilyApple8) )
|
||||||
|
{
|
||||||
|
g_caps.deviceId = 1008;
|
||||||
|
}
|
||||||
|
else if (m_device.supportsFamily(MTLGPUFamilyApple7) )
|
||||||
|
{
|
||||||
|
g_caps.deviceId = 1007;
|
||||||
|
}
|
||||||
|
else if (m_device.supportsFamily(MTLGPUFamilyApple6) )
|
||||||
|
{
|
||||||
|
g_caps.deviceId = 1006;
|
||||||
|
}
|
||||||
|
else if (m_device.supportsFamily(MTLGPUFamilyApple5) )
|
||||||
|
{
|
||||||
|
g_caps.deviceId = 1005;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if BX_PLATFORM_OSX
|
#if BX_PLATFORM_OSX
|
||||||
if (0 == g_caps.vendorId)
|
if (0 == g_caps.vendorId)
|
||||||
|
{
|
||||||
|
io_registry_entry_t entry;
|
||||||
|
|
||||||
|
uint64_t registryId = getRegistryId(m_device);
|
||||||
|
|
||||||
|
if (0 != registryId)
|
||||||
{
|
{
|
||||||
io_registry_entry_t entry;
|
entry = IOServiceGetMatchingService(mach_port_t(NULL), IORegistryEntryIDMatching(registryId) );
|
||||||
|
|
||||||
uint64_t registryId = getRegistryId(m_device);
|
if (0 != entry)
|
||||||
|
|
||||||
if (0 != registryId)
|
|
||||||
{
|
{
|
||||||
entry = IOServiceGetMatchingService(mach_port_t(NULL), IORegistryEntryIDMatching(registryId) );
|
io_registry_entry_t parent;
|
||||||
|
|
||||||
if (0 != entry)
|
if (kIOReturnSuccess == IORegistryEntryGetParentEntry(entry, kIOServicePlane, &parent) )
|
||||||
{
|
{
|
||||||
io_registry_entry_t parent;
|
g_caps.vendorId = getEntryProperty(parent, CFSTR("vendor-id") );
|
||||||
|
g_caps.deviceId = getEntryProperty(parent, CFSTR("device-id") );
|
||||||
|
|
||||||
if (kIOReturnSuccess == IORegistryEntryGetParentEntry(entry, kIOServicePlane, &parent) )
|
IOObjectRelease(parent);
|
||||||
{
|
|
||||||
g_caps.vendorId = getEntryProperty(parent, CFSTR("vendor-id") );
|
|
||||||
g_caps.deviceId = getEntryProperty(parent, CFSTR("device-id") );
|
|
||||||
|
|
||||||
IOObjectRelease(parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
IOObjectRelease(entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IOObjectRelease(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // BX_PLATFORM_OSX
|
|
||||||
}
|
}
|
||||||
|
#endif // BX_PLATFORM_OSX
|
||||||
|
|
||||||
g_caps.numGPUs = 1;
|
g_caps.numGPUs = 1;
|
||||||
g_caps.gpu[0].vendorId = g_caps.vendorId;
|
g_caps.gpu[0].vendorId = g_caps.vendorId;
|
||||||
|
|||||||
Reference in New Issue
Block a user