WebGPU wrapper wip: add device.create_* methods for existing objects
This commit is contained in:
parent
e52ab0d731
commit
cde91b55a9
4 changed files with 86 additions and 2 deletions
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
#include <psemek/wgpu/chained_struct.hpp>
|
#include <psemek/wgpu/chained_struct.hpp>
|
||||||
#include <psemek/wgpu/queue.hpp>
|
#include <psemek/wgpu/queue.hpp>
|
||||||
|
#include <psemek/wgpu/buffer.hpp>
|
||||||
|
#include <psemek/wgpu/query_set.hpp>
|
||||||
|
#include <psemek/wgpu/sampler.hpp>
|
||||||
|
#include <psemek/wgpu/shader_module.hpp>
|
||||||
|
#include <psemek/wgpu/texture.hpp>
|
||||||
#include <psemek/wgpu/command_encoder.hpp>
|
#include <psemek/wgpu/command_encoder.hpp>
|
||||||
#include <psemek/wgpu/detail/object.hpp>
|
#include <psemek/wgpu/detail/object.hpp>
|
||||||
|
|
||||||
|
|
@ -102,7 +107,12 @@ namespace psemek::wgpu
|
||||||
using request_callback = std::function<void(request_status, device, std::string const & message)>;
|
using request_callback = std::function<void(request_status, device, std::string const & message)>;
|
||||||
|
|
||||||
queue get_queue();
|
queue get_queue();
|
||||||
|
buffer create_buffer(buffer::descriptor const & desc);
|
||||||
command_encoder create_command_encoder(command_encoder::descriptor const & desc);
|
command_encoder create_command_encoder(command_encoder::descriptor const & desc);
|
||||||
|
query_set create_query_set(query_set::descriptor const & desc);
|
||||||
|
sampler create_sampler(sampler::descriptor const & desc);
|
||||||
|
shader_module create_shader_module(shader_module::descriptor const & desc);
|
||||||
|
texture create_texture(texture::descriptor const & desc);
|
||||||
|
|
||||||
static void reference(void * ptr);
|
static void reference(void * ptr);
|
||||||
static void release(void * ptr);
|
static void release(void * ptr);
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace psemek::wgpu
|
||||||
: detail::object<query_set>(ptr)
|
: detail::object<query_set>(ptr)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
friend struct command_encoder;
|
friend struct device;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace psemek::wgpu
|
||||||
struct compilation_hint
|
struct compilation_hint
|
||||||
{
|
{
|
||||||
std::vector<chained_struct> chain = {};
|
std::vector<chained_struct> chain = {};
|
||||||
std::string entryPoint;
|
std::string entry_point;
|
||||||
pipeline_layout layout;
|
pipeline_layout layout;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,17 @@ namespace psemek::wgpu
|
||||||
return queue(ptr);
|
return queue(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buffer device::create_buffer(buffer::descriptor const & desc)
|
||||||
|
{
|
||||||
|
WGPUBufferDescriptor descriptor = {};
|
||||||
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
descriptor.label = desc.label.data();
|
||||||
|
descriptor.usage = (WGPUBufferUsageFlags)desc.usage;
|
||||||
|
descriptor.size = desc.size;
|
||||||
|
descriptor.mappedAtCreation = desc.mapped_at_creation;
|
||||||
|
return buffer(wgpuDeviceCreateBuffer((WGPUDevice)get(), &descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
command_encoder device::create_command_encoder(command_encoder::descriptor const & desc)
|
command_encoder device::create_command_encoder(command_encoder::descriptor const & desc)
|
||||||
{
|
{
|
||||||
WGPUCommandEncoderDescriptor descriptor = {};
|
WGPUCommandEncoderDescriptor descriptor = {};
|
||||||
|
|
@ -21,6 +32,69 @@ namespace psemek::wgpu
|
||||||
return command_encoder(wgpuDeviceCreateCommandEncoder((WGPUDevice)get(), &descriptor));
|
return command_encoder(wgpuDeviceCreateCommandEncoder((WGPUDevice)get(), &descriptor));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query_set device::create_query_set(query_set::descriptor const & desc)
|
||||||
|
{
|
||||||
|
WGPUQuerySetDescriptor descriptor = {};
|
||||||
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
descriptor.label = desc.label.data();
|
||||||
|
descriptor.type = (WGPUQueryType)desc.type;
|
||||||
|
descriptor.count = desc.count;
|
||||||
|
return query_set(wgpuDeviceCreateQuerySet((WGPUDevice)get(), &descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
|
sampler device::create_sampler(sampler::descriptor const & desc)
|
||||||
|
{
|
||||||
|
WGPUSamplerDescriptor descriptor = {};
|
||||||
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
descriptor.label = desc.label.data();
|
||||||
|
descriptor.addressModeU = (WGPUAddressMode)desc.address_mode_u;
|
||||||
|
descriptor.addressModeV = (WGPUAddressMode)desc.address_mode_v;
|
||||||
|
descriptor.addressModeW = (WGPUAddressMode)desc.address_mode_w;
|
||||||
|
descriptor.magFilter = (WGPUFilterMode)desc.mag_filter;
|
||||||
|
descriptor.minFilter = (WGPUFilterMode)desc.min_filter;
|
||||||
|
descriptor.mipmapFilter = (WGPUMipmapFilterMode)desc.mipmap_filter;
|
||||||
|
descriptor.lodMinClamp = desc.lod_clamp.min;
|
||||||
|
descriptor.lodMaxClamp = desc.lod_clamp.max;
|
||||||
|
descriptor.compare = (WGPUCompareFunction)desc.compare;
|
||||||
|
descriptor.maxAnisotropy = desc.maxAnisotropy;
|
||||||
|
return sampler(wgpuDeviceCreateSampler((WGPUDevice)get(), &descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
|
shader_module device::create_shader_module(shader_module::descriptor const & desc)
|
||||||
|
{
|
||||||
|
std::vector<WGPUShaderModuleCompilationHint> hints;
|
||||||
|
for (auto const & hint_in : desc.hints)
|
||||||
|
{
|
||||||
|
auto & hint = hints.emplace_back();
|
||||||
|
hint.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(hint_in.chain);
|
||||||
|
hint.entryPoint = hint_in.entry_point.data();
|
||||||
|
hint.layout = (WGPUPipelineLayout)hint_in.layout.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
WGPUShaderModuleDescriptor descriptor = {};
|
||||||
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
descriptor.label = desc.label.data();
|
||||||
|
descriptor.hintCount = hints.size();
|
||||||
|
descriptor.hints = hints.data();
|
||||||
|
return shader_module(wgpuDeviceCreateShaderModule((WGPUDevice)get(), &descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
|
texture device::create_texture(texture::descriptor const & desc)
|
||||||
|
{
|
||||||
|
WGPUTextureDescriptor descriptor = {};
|
||||||
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
descriptor.label = desc.label.data();
|
||||||
|
descriptor.usage = (WGPUTextureUsageFlags)desc.usage;
|
||||||
|
descriptor.dimension = (WGPUTextureDimension)desc.dimension;
|
||||||
|
descriptor.size = {desc.size[0], desc.size[1], desc.size[2]};
|
||||||
|
descriptor.format = (WGPUTextureFormat)desc.format;
|
||||||
|
descriptor.mipLevelCount = desc.mip_level_count;
|
||||||
|
descriptor.sampleCount = desc.sample_count;
|
||||||
|
descriptor.viewFormatCount = desc.view_formats.size();
|
||||||
|
descriptor.viewFormats = (WGPUTextureFormat *)desc.view_formats.data();
|
||||||
|
return texture(wgpuDeviceCreateTexture((WGPUDevice)get(), &descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
void device::reference(void * ptr)
|
void device::reference(void * ptr)
|
||||||
{
|
{
|
||||||
wgpuDeviceReference((WGPUDevice)ptr);
|
wgpuDeviceReference((WGPUDevice)ptr);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue