Implement mipmap generation for Metal backends (#1035)

This commit is contained in:
Ben Doherty
2019-03-25 14:41:22 -07:00
committed by GitHub
parent 25c5bbd624
commit 25eef9dddb
+15 -2
View File
@@ -380,11 +380,23 @@ void MetalDriver::setExternalStream(Handle<HwTexture> th, Handle<HwStream> sh) {
}
void MetalDriver::generateMipmaps(Handle<HwTexture> th) {
// @autoreleasepool is used to release the one-off command buffer and encoder in case this work
// is done outside a frame.
@autoreleasepool {
auto tex = handle_cast<MetalTexture>(mHandleMap, th);
// Create a one-off command buffer to execute the blit command. Technically, we could re-use
// this command buffer for later rendering commands, but we'll just commit it here for
// simplicity.
id <MTLCommandBuffer> commandBuffer = [mContext->commandQueue commandBuffer];
id <MTLBlitCommandEncoder> blitEncoder = [commandBuffer blitCommandEncoder];
[blitEncoder generateMipmapsForTexture:tex->texture];
[blitEncoder endEncoding];
[commandBuffer commit];
}
}
bool MetalDriver::canGenerateMipmaps() {
return false;
return true;
}
void MetalDriver::updateUniformBuffer(Handle<HwUniformBuffer> ubh,
@@ -575,6 +587,7 @@ void MetalDriver::blit(TargetBufferFlags buffers,
Handle<HwRenderTarget> dst, driver::Viewport dstRect,
Handle<HwRenderTarget> src, driver::Viewport srcRect,
SamplerMagFilter filter) {
ASSERT_POSTCONDITION(false, "Blitting not implemented.");
}
void MetalDriver::draw(driver::PipelineState ps, Handle<HwRenderPrimitive> rph) {