mirror of
https://github.com/Kbz-8/Pulse.git
synced 2026-01-10 15:03:34 +00:00
77 lines
2.2 KiB
Objective-C
77 lines
2.2 KiB
Objective-C
// Copyright (C) 2025 kbz_8
|
|
// This file is part of "Pulse"
|
|
// For conditions of distribution and use, see copyright notice in LICENSE
|
|
|
|
#include <string.h>
|
|
|
|
#include <Pulse.h>
|
|
#include "../../PulseInternal.h"
|
|
#include "Metal.h"
|
|
#include "MetalBuffer.h"
|
|
#include "MetalDevice.h"
|
|
#include "MetalCommandList.h"
|
|
|
|
PulseBuffer MetalCreateBuffer(PulseDevice device, const PulseBufferCreateInfo* create_infos)
|
|
{
|
|
@autoreleasepool
|
|
{
|
|
MetalDevice* metal_device = (MetalDevice*)METAL_RETRIEVE_DRIVER_DATA_AS(device, MetalDevice*);
|
|
|
|
PulseBuffer buffer = (PulseBuffer)calloc(1, sizeof(PulseBufferHandler));
|
|
PULSE_CHECK_ALLOCATION_RETVAL(buffer, PULSE_NULL_HANDLE);
|
|
|
|
MetalBuffer* metal_buffer = (MetalBuffer*)calloc(1, sizeof(MetalBuffer));
|
|
PULSE_CHECK_ALLOCATION_RETVAL(metal_buffer, PULSE_NULL_HANDLE);
|
|
|
|
uint32_t size = PULSE_ALIGN_UP(create_infos->size, 4);
|
|
|
|
buffer->device = device;
|
|
buffer->driver_data = metal_buffer;
|
|
buffer->size = size;
|
|
buffer->usage = create_infos->usage;
|
|
|
|
MTLResourceOptions options;
|
|
if((create_infos->usage & (PULSE_BUFFER_USAGE_TRANSFER_UPLOAD | PULSE_BUFFER_USAGE_TRANSFER_DOWNLOAD)) == 0) // Is storage only
|
|
options = MTLResourceStorageModePrivate;
|
|
else if((create_infos->usage & PULSE_BUFFER_USAGE_TRANSFER_DOWNLOAD) == 0)
|
|
options = MTLResourceCPUCacheModeWriteCombined;
|
|
else
|
|
options = MTLResourceCPUCacheModeDefaultCache;
|
|
|
|
metal_buffer->buffer = [metal_device->device newBufferWithLength:size options:options];
|
|
CHECK_METAL_RETVAL(device->backend, metal_buffer->buffer, PULSE_ERROR_INITIALIZATION_FAILED, PULSE_NULL_HANDLE);
|
|
|
|
return buffer;
|
|
}
|
|
}
|
|
|
|
bool MetalMapBuffer(PulseBuffer buffer, PulseMapMode mode, void** data)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void MetalUnmapBuffer(PulseBuffer buffer)
|
|
{
|
|
}
|
|
|
|
bool MetalCopyBufferToBuffer(PulseCommandList cmd, const PulseBufferRegion* src, const PulseBufferRegion* dst)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool MetalCopyBufferToImage(PulseCommandList cmd, const PulseBufferRegion* src, const PulseImageRegion* dst)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void MetalDestroyBuffer(PulseDevice device, PulseBuffer buffer)
|
|
{
|
|
@autoreleasepool
|
|
{
|
|
MetalBuffer* metal_buffer = METAL_RETRIEVE_DRIVER_DATA_AS(buffer, MetalBuffer*);
|
|
metal_buffer->buffer = nil;
|
|
free(metal_buffer);
|
|
free(buffer);
|
|
}
|
|
}
|