mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
Cleanup.
This commit is contained in:
parent
1bca8a29ac
commit
780fbb83fa
2 changed files with 283 additions and 73 deletions
|
@ -23,7 +23,7 @@ namespace bgfx { namespace mtl
|
||||||
// objects with creation functions starting with 'new' has a refcount 1 after creation, object must be destroyed with release.
|
// 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!
|
// commandBuffer, commandEncoders are autoreleased objects. Needs AutoreleasePool!
|
||||||
|
|
||||||
#define MTL_CLASS(name) \
|
#define MTL_CLASS(name) \
|
||||||
class name \
|
class name \
|
||||||
{ \
|
{ \
|
||||||
public: \
|
public: \
|
||||||
|
@ -37,8 +37,15 @@ namespace bgfx { namespace mtl
|
||||||
|
|
||||||
//TODO: ??MTLBlitCommandEncoder??
|
//TODO: ??MTLBlitCommandEncoder??
|
||||||
MTL_CLASS(Buffer)
|
MTL_CLASS(Buffer)
|
||||||
void* contents() { return m_obj.contents; }
|
void* contents()
|
||||||
uint32_t length() { return (uint32_t)m_obj.length; }
|
{
|
||||||
|
return m_obj.contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t length()
|
||||||
|
{
|
||||||
|
return (uint32_t)m_obj.length;
|
||||||
|
}
|
||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
MTL_CLASS(CommandBuffer)
|
MTL_CLASS(CommandBuffer)
|
||||||
|
@ -80,52 +87,104 @@ namespace bgfx { namespace mtl
|
||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
MTL_CLASS(CommandQueue)
|
MTL_CLASS(CommandQueue)
|
||||||
id<MTLCommandBuffer> commandBuffer() { return [m_obj commandBuffer]; }
|
id<MTLCommandBuffer> commandBuffer()
|
||||||
id<MTLCommandBuffer> commandBufferWithUnretainedReferences() { return [m_obj commandBufferWithUnretainedReferences]; }
|
{
|
||||||
|
return [m_obj commandBuffer];
|
||||||
|
}
|
||||||
|
|
||||||
|
id<MTLCommandBuffer> commandBufferWithUnretainedReferences()
|
||||||
|
{
|
||||||
|
return [m_obj commandBufferWithUnretainedReferences];
|
||||||
|
}
|
||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
MTL_CLASS(ComputeCommandEncoder)
|
MTL_CLASS(ComputeCommandEncoder)
|
||||||
void setComputePipelineState(id<MTLComputePipelineState> _state) { [m_obj setComputePipelineState:_state]; }
|
void setComputePipelineState(id<MTLComputePipelineState> _state)
|
||||||
|
{
|
||||||
|
[m_obj setComputePipelineState:_state];
|
||||||
|
}
|
||||||
|
|
||||||
void setBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index) { [m_obj setBuffer:_buffer offset:_offset atIndex:_index]; }
|
void setBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
||||||
|
{
|
||||||
|
[m_obj setBuffer:_buffer offset:_offset atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
void setTexture(id<MTLTexture> _texture, NSUInteger _index) { [m_obj setTexture:_texture atIndex:_index]; }
|
void setTexture(id<MTLTexture> _texture, NSUInteger _index)
|
||||||
|
{
|
||||||
|
[m_obj setTexture:_texture atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
void setSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index) { [m_obj setSamplerState:_sampler atIndex:_index]; }
|
void setSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
||||||
|
{
|
||||||
|
[m_obj setSamplerState:_sampler atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
void endEncoding() {[m_obj endEncoding] ;}
|
void endEncoding()
|
||||||
|
{
|
||||||
|
[m_obj endEncoding];
|
||||||
|
}
|
||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
MTL_CLASS(Device)
|
MTL_CLASS(Device)
|
||||||
bool supportsFeatureSet(MTLFeatureSet _featureSet) { return [m_obj supportsFeatureSet:_featureSet]; }
|
bool supportsFeatureSet(MTLFeatureSet _featureSet)
|
||||||
|
{
|
||||||
|
return [m_obj supportsFeatureSet:_featureSet];
|
||||||
|
}
|
||||||
|
|
||||||
id<MTLLibrary> newLibraryWithData(const void* _data) {
|
id<MTLLibrary> newLibraryWithData(const void* _data)
|
||||||
|
{
|
||||||
NSError* error;
|
NSError* error;
|
||||||
id<MTLLibrary> lib = [m_obj newLibraryWithData:(dispatch_data_t)_data error:&error];
|
id<MTLLibrary> lib = [m_obj newLibraryWithData:(dispatch_data_t)_data error:&error];
|
||||||
BX_WARN(error==NULL,"newLibraryWithData failed:%s", [error.localizedDescription UTF8String] );
|
BX_WARN(error==NULL,"newLibraryWithData failed:%s", [error.localizedDescription UTF8String] );
|
||||||
return lib;
|
return lib;
|
||||||
}
|
}
|
||||||
id<MTLLibrary> newLibraryWithSource(const char* _source) {
|
|
||||||
|
id<MTLLibrary> newLibraryWithSource(const char* _source)
|
||||||
|
{
|
||||||
NSError* error;
|
NSError* error;
|
||||||
id<MTLLibrary> lib = [m_obj newLibraryWithSource:@(_source) options:nil error:&error];
|
id<MTLLibrary> lib = [m_obj newLibraryWithSource:@(_source) options:nil error:&error];
|
||||||
if (error!=nil) NSLog(@"Shader compilation failed:%@", error.localizedDescription);
|
if (error!=nil) NSLog(@"Shader compilation failed:%@", error.localizedDescription);
|
||||||
//TODO: sometimes prints null as paremeter. string is too large
|
//TODO: sometimes prints null as paremeter. string is too large
|
||||||
BX_WARN(error==NULL,"Shader compilation failed:%s", [error.localizedDescription UTF8String]);
|
BX_WARN(error==NULL,"Shader compilation failed:%s", [error.localizedDescription UTF8String]);
|
||||||
return lib;
|
return lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
id<MTLCommandQueue> newCommandQueue() { return [m_obj newCommandQueue]; }
|
id<MTLCommandQueue> newCommandQueue()
|
||||||
id<MTLCommandQueue> newCommandQueueWithMaxCommandBufferCount(NSUInteger _maxCommandBufferCount) { return [m_obj newCommandQueueWithMaxCommandBufferCount:_maxCommandBufferCount]; }
|
{
|
||||||
|
return [m_obj newCommandQueue];
|
||||||
|
}
|
||||||
|
|
||||||
|
id<MTLCommandQueue> newCommandQueueWithMaxCommandBufferCount(NSUInteger _maxCommandBufferCount)
|
||||||
|
{
|
||||||
|
return [m_obj newCommandQueueWithMaxCommandBufferCount:_maxCommandBufferCount];
|
||||||
|
}
|
||||||
|
|
||||||
// Creating Resources
|
// Creating Resources
|
||||||
id<MTLBuffer> newBufferWithLength(unsigned int _length, MTLResourceOptions _options) { return [m_obj newBufferWithLength:_length options:_options ]; }
|
id<MTLBuffer> newBufferWithLength(unsigned int _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 newBufferWithLength:_length options:_options ];
|
||||||
|
}
|
||||||
|
|
||||||
id<MTLTexture> newTextureWithDescriptor(MTLTextureDescriptor * _descriptor) { return [m_obj newTextureWithDescriptor:_descriptor]; }
|
id<MTLBuffer> newBufferWithBytes(const void *_pointer, NSUInteger _length, MTLResourceOptions _options)
|
||||||
id<MTLSamplerState> newSamplerStateWithDescriptor(MTLSamplerDescriptor * _descriptor) { return [m_obj newSamplerStateWithDescriptor:_descriptor]; }
|
{
|
||||||
|
return [m_obj newBufferWithBytes:_pointer length:_length options:_options];
|
||||||
|
}
|
||||||
|
|
||||||
|
id<MTLTexture> newTextureWithDescriptor(MTLTextureDescriptor * _descriptor)
|
||||||
|
{
|
||||||
|
return [m_obj newTextureWithDescriptor:_descriptor];
|
||||||
|
}
|
||||||
|
|
||||||
|
id<MTLSamplerState> newSamplerStateWithDescriptor(MTLSamplerDescriptor * _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) { return [m_obj newDepthStencilStateWithDescriptor:_descriptor]; }
|
id<MTLDepthStencilState> newDepthStencilStateWithDescriptor(MTLDepthStencilDescriptor * _descriptor)
|
||||||
|
{
|
||||||
|
return [m_obj newDepthStencilStateWithDescriptor:_descriptor];
|
||||||
|
}
|
||||||
|
|
||||||
id <MTLRenderPipelineState> newRenderPipelineStateWithDescriptor(MTLRenderPipelineDescriptor *_descriptor)
|
id <MTLRenderPipelineState> newRenderPipelineStateWithDescriptor(MTLRenderPipelineDescriptor *_descriptor)
|
||||||
{
|
{
|
||||||
|
@ -164,27 +223,92 @@ namespace bgfx { namespace mtl
|
||||||
|
|
||||||
MTL_CLASS(RenderCommandEncoder)
|
MTL_CLASS(RenderCommandEncoder)
|
||||||
// Setting Graphics Rendering State
|
// Setting Graphics Rendering State
|
||||||
void setBlendColor(float _red, float _green, float _blue, float _alpha) { [m_obj setBlendColorRed:_red green:_green blue:_blue alpha:_alpha]; }
|
void setBlendColor(float _red, float _green, float _blue, float _alpha)
|
||||||
void setCullMode(MTLCullMode _cullMode) { [m_obj setCullMode:_cullMode]; }
|
{
|
||||||
void setDepthBias(float _depthBias, float _slopeScale, float _clamp) { [m_obj setDepthBias:_depthBias slopeScale:_slopeScale clamp:_clamp]; }
|
[m_obj setBlendColorRed:_red green:_green blue:_blue alpha:_alpha];
|
||||||
void setDepthStencilState(id<MTLDepthStencilState> _depthStencilState) { [m_obj setDepthStencilState:_depthStencilState];}
|
}
|
||||||
void setFrontFacingWinding(MTLWinding _frontFacingWinding) { [m_obj setFrontFacingWinding:_frontFacingWinding]; }
|
|
||||||
void setRenderPipelineState(id<MTLRenderPipelineState> _pipelineState) { [m_obj setRenderPipelineState:_pipelineState]; }
|
void setCullMode(MTLCullMode _cullMode)
|
||||||
void setScissorRect(MTLScissorRect _rect) { [m_obj setScissorRect:_rect]; }
|
{
|
||||||
void setStencilReferenceValue(uint32_t _ref) { [m_obj setStencilReferenceValue:_ref]; }
|
[m_obj setCullMode:_cullMode];
|
||||||
void setTriangleFillMode(MTLTriangleFillMode _fillMode) { [m_obj setTriangleFillMode:_fillMode]; }
|
}
|
||||||
void setViewport(MTLViewport _viewport) { [m_obj setViewport:_viewport]; }
|
|
||||||
void setVisibilityResultMode(MTLVisibilityResultMode _mode, NSUInteger _offset) { [m_obj setVisibilityResultMode:_mode offset:_offset]; }
|
void setDepthBias(float _depthBias, float _slopeScale, float _clamp)
|
||||||
|
{
|
||||||
|
[m_obj setDepthBias:_depthBias slopeScale:_slopeScale clamp:_clamp];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setDepthStencilState(id<MTLDepthStencilState> _depthStencilState)
|
||||||
|
{
|
||||||
|
[m_obj setDepthStencilState:_depthStencilState];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setFrontFacingWinding(MTLWinding _frontFacingWinding)
|
||||||
|
{
|
||||||
|
[m_obj setFrontFacingWinding:_frontFacingWinding];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setRenderPipelineState(id<MTLRenderPipelineState> _pipelineState)
|
||||||
|
{
|
||||||
|
[m_obj setRenderPipelineState:_pipelineState];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setScissorRect(MTLScissorRect _rect)
|
||||||
|
{
|
||||||
|
[m_obj setScissorRect:_rect];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setStencilReferenceValue(uint32_t _ref)
|
||||||
|
{
|
||||||
|
[m_obj setStencilReferenceValue:_ref];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTriangleFillMode(MTLTriangleFillMode _fillMode)
|
||||||
|
{
|
||||||
|
[m_obj setTriangleFillMode:_fillMode];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setViewport(MTLViewport _viewport)
|
||||||
|
{
|
||||||
|
[m_obj setViewport:_viewport];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setVisibilityResultMode(MTLVisibilityResultMode _mode, NSUInteger _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) { [m_obj setVertexBuffer:_buffer offset:_offset atIndex:_index]; }
|
void setVertexBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
||||||
void setVertexSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index) { [m_obj setVertexSamplerState:_sampler atIndex:_index]; }
|
{
|
||||||
void setVertexTexture(id<MTLTexture> _texture, NSUInteger _index) { [m_obj setVertexTexture:_texture atIndex:_index]; }
|
[m_obj setVertexBuffer:_buffer offset:_offset atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setVertexSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
||||||
|
{
|
||||||
|
[m_obj setVertexSamplerState:_sampler atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setVertexTexture(id<MTLTexture> _texture, NSUInteger _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) { [m_obj setFragmentBuffer:_buffer offset:_offset atIndex:_index]; }
|
void setFragmentBuffer(id<MTLBuffer> _buffer, NSUInteger _offset, NSUInteger _index)
|
||||||
void setFragmentSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index) { [m_obj setFragmentSamplerState:_sampler atIndex:_index]; }
|
{
|
||||||
void setFragmentTexture(id<MTLTexture> _texture, NSUInteger _index) { [m_obj setFragmentTexture:_texture atIndex:_index]; }
|
[m_obj setFragmentBuffer:_buffer offset:_offset atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setFragmentSamplerState(id<MTLSamplerState> _sampler, NSUInteger _index)
|
||||||
|
{
|
||||||
|
[m_obj setFragmentSamplerState:_sampler atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void setFragmentTexture(id<MTLTexture> _texture, NSUInteger _index)
|
||||||
|
{
|
||||||
|
[m_obj setFragmentTexture:_texture atIndex:_index];
|
||||||
|
}
|
||||||
|
|
||||||
//Drawing Geometric Primitives
|
//Drawing Geometric Primitives
|
||||||
//NOTE: not exposing functions without instanceCount, it seems they are just wrappers
|
//NOTE: not exposing functions without instanceCount, it seems they are just wrappers
|
||||||
|
@ -193,29 +317,66 @@ namespace bgfx { namespace mtl
|
||||||
[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(MTLPrimitiveType _primitiveType, NSUInteger _vertexStart, NSUInteger _vertexCount, NSUInteger _instanceCount) {
|
void drawPrimitives(MTLPrimitiveType _primitiveType, NSUInteger _vertexStart, NSUInteger _vertexCount, NSUInteger _instanceCount)
|
||||||
[m_obj drawPrimitives:_primitiveType vertexStart:_vertexStart vertexCount:_vertexCount instanceCount:_instanceCount];}
|
{
|
||||||
|
[m_obj drawPrimitives:_primitiveType vertexStart:_vertexStart vertexCount:_vertexCount instanceCount:_instanceCount];
|
||||||
|
}
|
||||||
|
|
||||||
void insertDebugSignpost(const char* _string) { [m_obj insertDebugSignpost:@(_string)]; }
|
void insertDebugSignpost(const char* _string)
|
||||||
void pushDebugGroup(const char* _string) { [m_obj pushDebugGroup:@(_string)]; }
|
{
|
||||||
void popDebugGroup() { [m_obj popDebugGroup]; }
|
[m_obj insertDebugSignpost:@(_string)];
|
||||||
|
}
|
||||||
|
|
||||||
void endEncoding() { [m_obj endEncoding]; }
|
void pushDebugGroup(const char* _string)
|
||||||
|
{
|
||||||
|
[m_obj pushDebugGroup:@(_string)];
|
||||||
|
}
|
||||||
|
|
||||||
|
void popDebugGroup()
|
||||||
|
{
|
||||||
|
[m_obj popDebugGroup];
|
||||||
|
}
|
||||||
|
|
||||||
|
void endEncoding()
|
||||||
|
{
|
||||||
|
[m_obj endEncoding];
|
||||||
|
}
|
||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
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) { [m_obj replaceRegion:_region mipmapLevel:_level slice:_slice withBytes:_pixelBytes bytesPerRow:_bytesPerRow bytesPerImage:_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];
|
||||||
|
}
|
||||||
|
|
||||||
// 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) { [m_obj getBytes:_pixelBytes bytesPerRow:_bytesPerRow bytesPerImage:_bytesPerImage fromRegion:_region mipmapLevel:_mipmapLevel slice:_slice]; }
|
void getBytes(void *_pixelBytes, NSUInteger _bytesPerRow, NSUInteger _bytesPerImage, MTLRegion _region, NSUInteger _mipmapLevel, NSUInteger _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) { return [m_obj newTextureViewWithPixelFormat:_pixelFormat]; }
|
id<MTLTexture> newTextureViewWithPixelFormat(MTLPixelFormat _pixelFormat)
|
||||||
|
{
|
||||||
|
return [m_obj newTextureViewWithPixelFormat:_pixelFormat];
|
||||||
|
}
|
||||||
|
|
||||||
//properties
|
//properties
|
||||||
uint32_t width() { return (uint32_t)m_obj.width; }
|
uint32_t width()
|
||||||
uint32_t height() { return (uint32_t)m_obj.height; }
|
{
|
||||||
MTLPixelFormat pixelFormat() const { return m_obj.pixelFormat; }
|
return (uint32_t)m_obj.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t height()
|
||||||
|
{
|
||||||
|
return (uint32_t)m_obj.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
MTLPixelFormat pixelFormat() const
|
||||||
|
{
|
||||||
|
return m_obj.pixelFormat;
|
||||||
|
}
|
||||||
MTL_CLASS_END
|
MTL_CLASS_END
|
||||||
|
|
||||||
typedef id<MTLComputePipelineState> ComputePipelineState;
|
typedef id<MTLComputePipelineState> ComputePipelineState;
|
||||||
|
@ -226,47 +387,90 @@ namespace bgfx { namespace mtl
|
||||||
//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;
|
||||||
RenderPipelineDescriptor newRenderPipelineDescriptor() { return [MTLRenderPipelineDescriptor new]; }
|
RenderPipelineDescriptor newRenderPipelineDescriptor()
|
||||||
void reset(RenderPipelineDescriptor _desc) { [_desc reset]; };
|
{
|
||||||
|
return [MTLRenderPipelineDescriptor new];
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset(RenderPipelineDescriptor _desc)
|
||||||
|
{
|
||||||
|
[_desc reset];
|
||||||
|
}
|
||||||
|
|
||||||
typedef MTLRenderPipelineColorAttachmentDescriptor* RenderPipelineColorAttachmentDescriptor;
|
typedef MTLRenderPipelineColorAttachmentDescriptor* RenderPipelineColorAttachmentDescriptor;
|
||||||
|
|
||||||
typedef MTLDepthStencilDescriptor* DepthStencilDescriptor;
|
typedef MTLDepthStencilDescriptor* DepthStencilDescriptor;
|
||||||
MTLDepthStencilDescriptor* newDepthStencilDescriptor() { return [MTLDepthStencilDescriptor new]; }
|
MTLDepthStencilDescriptor* newDepthStencilDescriptor()
|
||||||
|
{
|
||||||
|
return [MTLDepthStencilDescriptor new];
|
||||||
|
}
|
||||||
|
|
||||||
typedef MTLStencilDescriptor* StencilDescriptor;
|
typedef MTLStencilDescriptor* StencilDescriptor;
|
||||||
MTLStencilDescriptor* newStencilDescriptor() { return [MTLStencilDescriptor new]; }
|
MTLStencilDescriptor* newStencilDescriptor()
|
||||||
|
{
|
||||||
|
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;
|
||||||
MTLRenderPassDescriptor* newRenderPassDescriptor() { return [MTLRenderPassDescriptor new]; }
|
MTLRenderPassDescriptor* newRenderPassDescriptor()
|
||||||
|
{
|
||||||
|
return [MTLRenderPassDescriptor new];
|
||||||
|
}
|
||||||
|
|
||||||
typedef MTLVertexDescriptor* VertexDescriptor;
|
typedef MTLVertexDescriptor* VertexDescriptor;
|
||||||
MTLVertexDescriptor* newVertexDescriptor() { return [MTLVertexDescriptor new]; }
|
MTLVertexDescriptor* newVertexDescriptor()
|
||||||
void reset(VertexDescriptor _desc) { [_desc reset]; };
|
{
|
||||||
|
return [MTLVertexDescriptor new];
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset(VertexDescriptor _desc)
|
||||||
|
{
|
||||||
|
[_desc reset];
|
||||||
|
}
|
||||||
|
|
||||||
typedef MTLSamplerDescriptor* SamplerDescriptor;
|
typedef MTLSamplerDescriptor* SamplerDescriptor;
|
||||||
MTLSamplerDescriptor* newSamplerDescriptor() { return [MTLSamplerDescriptor new]; }
|
MTLSamplerDescriptor* newSamplerDescriptor()
|
||||||
|
{
|
||||||
|
return [MTLSamplerDescriptor new];
|
||||||
|
}
|
||||||
|
|
||||||
typedef MTLTextureDescriptor* TextureDescriptor;
|
typedef MTLTextureDescriptor* TextureDescriptor;
|
||||||
MTLTextureDescriptor* newTextureDescriptor() { return [MTLTextureDescriptor new]; }
|
MTLTextureDescriptor* newTextureDescriptor()
|
||||||
|
{
|
||||||
|
return [MTLTextureDescriptor new];
|
||||||
|
}
|
||||||
|
|
||||||
typedef MTLRenderPipelineReflection* RenderPipelineReflection;
|
typedef MTLRenderPipelineReflection* RenderPipelineReflection;
|
||||||
|
|
||||||
//helper functions
|
//helper functions
|
||||||
void release(NSObject* _obj) { [_obj release]; }
|
void release(NSObject* _obj)
|
||||||
void retain(NSObject* _obj) { [_obj retain]; }
|
{
|
||||||
const char* utf8String(NSString* _str) { return [_str UTF8String]; }
|
[_obj release];
|
||||||
|
}
|
||||||
|
|
||||||
|
void retain(NSObject* _obj)
|
||||||
|
{
|
||||||
|
[_obj retain];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* utf8String(NSString* _str)
|
||||||
|
{
|
||||||
|
return [_str UTF8String];
|
||||||
|
}
|
||||||
|
|
||||||
#define MTL_RELEASE(_obj) \
|
#define MTL_RELEASE(_obj) \
|
||||||
[_obj release]; \
|
[_obj release]; \
|
||||||
_obj = nil;
|
_obj = nil;
|
||||||
|
|
||||||
#if BX_PLATFORM_IOS
|
#if BX_PLATFORM_IOS
|
||||||
bool OsVersionEqualOrGreater(const char* _version) { return ([[[UIDevice currentDevice] systemVersion] compare:@(_version) options:NSNumericSearch] != NSOrderedAscending); }
|
bool OsVersionEqualOrGreater(const char* _version)
|
||||||
|
{
|
||||||
|
return ([[[UIDevice currentDevice] systemVersion] compare:@(_version) options:NSNumericSearch] != NSOrderedAscending);
|
||||||
|
}
|
||||||
//TODO: this could be in bx ?
|
//TODO: this could be in bx ?
|
||||||
#endif //
|
#endif //
|
||||||
|
|
||||||
|
@ -481,9 +685,8 @@ namespace bgfx { namespace mtl
|
||||||
uint8_t m_num; // number of color handles
|
uint8_t m_num; // number of color handles
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} /* namespace metal */ } // namespace bgfx
|
} /* namespace metal */ } // namespace bgfx
|
||||||
|
|
||||||
|
#endif // BGFX_CONFIG_RENDERER_METAL
|
||||||
|
|
||||||
#endif // BGFX_RENDERER_METAL_H_HEADER_GUARD
|
#endif // BGFX_RENDERER_METAL_H_HEADER_GUARD
|
||||||
|
|
|
@ -348,7 +348,8 @@ namespace bgfx { namespace mtl
|
||||||
//on iOS we need the layer as CAmetalLayer
|
//on iOS we need the layer as CAmetalLayer
|
||||||
#if BX_PLATFORM_IOS
|
#if BX_PLATFORM_IOS
|
||||||
CAMetalLayer* metalLayer = (CAMetalLayer*)g_platformData.nwh;
|
CAMetalLayer* metalLayer = (CAMetalLayer*)g_platformData.nwh;
|
||||||
if (metalLayer == nil || ![metalLayer isKindOfClass:NSClassFromString(@"CAMetalLayer")])
|
if (NULL == metalLayer
|
||||||
|
|| ![metalLayer isKindOfClass:NSClassFromString(@"CAMetalLayer")])
|
||||||
{
|
{
|
||||||
BX_WARN(NULL != m_device, "Unable to create Metal device. Please set platform data window to a CAMetalLayer");
|
BX_WARN(NULL != m_device, "Unable to create Metal device. Please set platform data window to a CAMetalLayer");
|
||||||
return false;
|
return false;
|
||||||
|
@ -378,7 +379,8 @@ namespace bgfx { namespace mtl
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_metalLayer.device = m_device;
|
m_metalLayer.device = m_device;
|
||||||
|
m_metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm;
|
||||||
|
|
||||||
m_commandQueue = m_device.newCommandQueue();
|
m_commandQueue = m_device.newCommandQueue();
|
||||||
BGFX_FATAL(NULL != m_commandQueue, Fatal::UnableToInitialize, "Unable to create Metal device.");
|
BGFX_FATAL(NULL != m_commandQueue, Fatal::UnableToInitialize, "Unable to create Metal device.");
|
||||||
|
@ -410,7 +412,7 @@ namespace bgfx { namespace mtl
|
||||||
);
|
);
|
||||||
|
|
||||||
g_caps.maxTextureSize = 2048; //ASK: real caps width/height: 4096, but max depth(3D) size is only: 2048
|
g_caps.maxTextureSize = 2048; //ASK: real caps width/height: 4096, but max depth(3D) size is only: 2048
|
||||||
//TODO: OSX
|
//TODO: OSX
|
||||||
#if BX_PLATFORM_IOS
|
#if BX_PLATFORM_IOS
|
||||||
g_caps.maxFBAttachments = uint8_t(bx::uint32_min(m_device.supportsFeatureSet(MTLFeatureSet_iOS_GPUFamily2_v1) ? 8 :4, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS));
|
g_caps.maxFBAttachments = uint8_t(bx::uint32_min(m_device.supportsFeatureSet(MTLFeatureSet_iOS_GPUFamily2_v1) ? 8 :4, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS));
|
||||||
#endif // BX_PLATFORM_*
|
#endif // BX_PLATFORM_*
|
||||||
|
@ -448,7 +450,6 @@ namespace bgfx { namespace mtl
|
||||||
bx::snprintf(s_viewName[ii], BGFX_CONFIG_MAX_VIEW_NAME_RESERVED+1, "%3d ", ii);
|
bx::snprintf(s_viewName[ii], BGFX_CONFIG_MAX_VIEW_NAME_RESERVED+1, "%3d ", ii);
|
||||||
}
|
}
|
||||||
|
|
||||||
BX_TRACE("x");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,8 +676,11 @@ namespace bgfx { namespace mtl
|
||||||
|
|
||||||
void saveScreenShot(const char* _filePath) BX_OVERRIDE
|
void saveScreenShot(const char* _filePath) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
if ( NULL == m_drawable || NULL == m_drawable.texture)
|
if (NULL == m_drawable
|
||||||
|
|| NULL == m_drawable.texture)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: we should wait for completion of pending commandBuffers
|
//TODO: we should wait for completion of pending commandBuffers
|
||||||
//TODO: implement this with saveScreenshotBegin/End
|
//TODO: implement this with saveScreenshotBegin/End
|
||||||
|
@ -804,8 +808,11 @@ namespace bgfx { namespace mtl
|
||||||
|
|
||||||
void flip(HMD& /*_hmd*/) BX_OVERRIDE
|
void flip(HMD& /*_hmd*/) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
if ( m_drawable == nil || m_commandBuffer == nil) //there was no draw call, cannot flip
|
if (NULL == m_drawable
|
||||||
|
|| NULL == m_commandBuffer)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Present and commit the command buffer
|
// Present and commit the command buffer
|
||||||
m_commandBuffer.presentDrawable(m_drawable);
|
m_commandBuffer.presentDrawable(m_drawable);
|
||||||
|
|
Loading…
Reference in a new issue