Support native limits in wgpu device creation
This commit is contained in:
parent
f986f0d4b1
commit
fbb032fe63
4 changed files with 29 additions and 1 deletions
|
|
@ -26,6 +26,7 @@ namespace psemek::app
|
|||
#if defined(PSEMEK_GRAPHICS_API_WEBGPU)
|
||||
std::vector<wgpu::feature> required_features;
|
||||
std::optional<wgpu::limits> required_limits;
|
||||
std::optional<wgpu::native_limits> required_native_limits;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -106,9 +106,18 @@ namespace psemek::sdl2
|
|||
wgpu::device::descriptor device_descriptor
|
||||
{
|
||||
.required_features = options.required_features,
|
||||
.required_limits = options.required_limits ? std::optional(wgpu::device::required_limits{.limits = *options.required_limits}) : std::nullopt,
|
||||
.required_limits = std::nullopt,
|
||||
};
|
||||
|
||||
if (options.required_limits || options.required_native_limits)
|
||||
device_descriptor.required_limits = wgpu::device::required_limits{};
|
||||
|
||||
if (options.required_limits)
|
||||
device_descriptor.required_limits->limits = *options.required_limits;
|
||||
|
||||
if (options.required_native_limits)
|
||||
device_descriptor.required_limits->chain.push_back(wgpu::native_limits{*options.required_native_limits});
|
||||
|
||||
wgpu_adapter_.request_device(device_descriptor, [this](wgpu::device::request_status status, wgpu::device device_in, std::string const & message)
|
||||
{
|
||||
if (status != wgpu::device::request_status::success)
|
||||
|
|
|
|||
|
|
@ -83,6 +83,12 @@ namespace psemek::wgpu
|
|||
std::uint32_t max_compute_workgroups_per_dimension = 65535;
|
||||
};
|
||||
|
||||
struct native_limits
|
||||
{
|
||||
std::uint32_t max_push_constant_size = 0;
|
||||
std::uint32_t max_non_sampler_bindings = 0;
|
||||
};
|
||||
|
||||
enum class create_pipeline_async_status : std::uint32_t
|
||||
{
|
||||
success = 0x00000000,
|
||||
|
|
@ -186,4 +192,6 @@ namespace psemek::wgpu
|
|||
friend struct adapter;
|
||||
};
|
||||
|
||||
detail::chained_struct_ptr to_chained_struct(native_limits && value);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include <psemek/wgpu/device.hpp>
|
||||
#include <psemek/wgpu/external/webgpu.h>
|
||||
#include <psemek/wgpu/external/wgpu.h>
|
||||
|
||||
#include <cstring>
|
||||
|
||||
|
|
@ -452,4 +453,13 @@ namespace psemek::wgpu
|
|||
wgpuDeviceRelease((WGPUDevice)ptr);
|
||||
}
|
||||
|
||||
detail::chained_struct_ptr to_chained_struct(native_limits && value)
|
||||
{
|
||||
WGPURequiredLimitsExtras chained = {};
|
||||
chained.chain.sType = (WGPUSType)WGPUSType_RequiredLimitsExtras;
|
||||
static_assert(sizeof(WGPUNativeLimits) == sizeof(native_limits));
|
||||
std::memcpy(&chained.limits, &value, sizeof(value));
|
||||
return detail::make_chained_struct(chained);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue