Update to wgpu-native v27.0.2.0

This commit is contained in:
Nikita Lisitsa 2025-12-02 17:40:51 +03:00
parent 48d756bdd5
commit 62f2adcb82
8 changed files with 68 additions and 12 deletions

View file

@ -64,7 +64,7 @@ if(NOT DEFINED PSEMEK_GRAPHICS_API)
endif() endif()
if(PSEMEK_GRAPHICS_API STREQUAL WEBGPU) if(PSEMEK_GRAPHICS_API STREQUAL WEBGPU)
find_package(wgpu-native 25.0.2.1 REQUIRED) find_package(wgpu-native 27.0.2.0 REQUIRED)
endif() endif()
message(STATUS "Using graphics API ${PSEMEK_GRAPHICS_API}") message(STATUS "Using graphics API ${PSEMEK_GRAPHICS_API}")

View file

@ -46,7 +46,6 @@ namespace psemek::wgpu
push_constants = 0x00030001, push_constants = 0x00030001,
texture_adapter_specific_format_features = 0x00030002, texture_adapter_specific_format_features = 0x00030002,
multi_draw_indirect = 0x00030003,
multi_draw_indirect_count = 0x00030004, multi_draw_indirect_count = 0x00030004,
vertex_writable_storage = 0x00030005, vertex_writable_storage = 0x00030005,
texture_binding_array = 0x00030006, texture_binding_array = 0x00030006,
@ -59,10 +58,12 @@ namespace psemek::wgpu
mappable_primary_buffers = 0x0003000e, mappable_primary_buffers = 0x0003000e,
buffer_binding_array = 0x0003000f, buffer_binding_array = 0x0003000f,
uniform_buffer_and_storage_texture_array_non_uniform_indexing = 0x00030010, uniform_buffer_and_storage_texture_array_non_uniform_indexing = 0x00030010,
polygon_mode_line = 0x00030013,
polygon_mode_point = 0x00030014,
conservative_rasterization = 0x00030015,
spirv_shader_passthrough = 0x00030017, spirv_shader_passthrough = 0x00030017,
vertex_attribute64bit = 0x00030019, vertex_attribute64bit = 0x00030019,
texture_format_nv12 = 0x0003001a, texture_format_nv12 = 0x0003001a,
ray_tracing_acceleration_structure = 0x0003001b,
ray_query = 0x0003001c, ray_query = 0x0003001c,
shader_f64 = 0x0003001d, shader_f64 = 0x0003001d,
shader_i16 = 0x0003001e, shader_i16 = 0x0003001e,
@ -73,6 +74,7 @@ namespace psemek::wgpu
subgroup_barrier = 0x00030023, subgroup_barrier = 0x00030023,
timestamp_query_inside_encoders = 0x00030024, timestamp_query_inside_encoders = 0x00030024,
timestamp_query_inside_passes = 0x00030025, timestamp_query_inside_passes = 0x00030025,
shader_int64 = 0x00030026,
}; };
struct limits struct limits

View file

@ -14,13 +14,14 @@ typedef enum WGPUNativeSType {
WGPUSType_BindGroupLayoutEntryExtras = 0x00030008, WGPUSType_BindGroupLayoutEntryExtras = 0x00030008,
WGPUSType_QuerySetDescriptorExtras = 0x00030009, WGPUSType_QuerySetDescriptorExtras = 0x00030009,
WGPUSType_SurfaceConfigurationExtras = 0x0003000A, WGPUSType_SurfaceConfigurationExtras = 0x0003000A,
WGPUSType_SurfaceSourceSwapChainPanel = 0x0003000B,
WGPUSType_PrimitiveStateExtras = 0x0003000C,
WGPUNativeSType_Force32 = 0x7FFFFFFF WGPUNativeSType_Force32 = 0x7FFFFFFF
} WGPUNativeSType; } WGPUNativeSType;
typedef enum WGPUNativeFeature { typedef enum WGPUNativeFeature {
WGPUNativeFeature_PushConstants = 0x00030001, WGPUNativeFeature_PushConstants = 0x00030001,
WGPUNativeFeature_TextureAdapterSpecificFormatFeatures = 0x00030002, WGPUNativeFeature_TextureAdapterSpecificFormatFeatures = 0x00030002,
WGPUNativeFeature_MultiDrawIndirect = 0x00030003,
WGPUNativeFeature_MultiDrawIndirectCount = 0x00030004, WGPUNativeFeature_MultiDrawIndirectCount = 0x00030004,
WGPUNativeFeature_VertexWritableStorage = 0x00030005, WGPUNativeFeature_VertexWritableStorage = 0x00030005,
WGPUNativeFeature_TextureBindingArray = 0x00030006, WGPUNativeFeature_TextureBindingArray = 0x00030006,
@ -36,15 +37,14 @@ typedef enum WGPUNativeFeature {
// TODO: requires wgpu.h api change // TODO: requires wgpu.h api change
// WGPUNativeFeature_AddressModeClampToZero = 0x00030011, // WGPUNativeFeature_AddressModeClampToZero = 0x00030011,
// WGPUNativeFeature_AddressModeClampToBorder = 0x00030012, // WGPUNativeFeature_AddressModeClampToBorder = 0x00030012,
// WGPUNativeFeature_PolygonModeLine = 0x00030013, WGPUNativeFeature_PolygonModeLine = 0x00030013,
// WGPUNativeFeature_PolygonModePoint = 0x00030014, WGPUNativeFeature_PolygonModePoint = 0x00030014,
// WGPUNativeFeature_ConservativeRasterization = 0x00030015, WGPUNativeFeature_ConservativeRasterization = 0x00030015,
// WGPUNativeFeature_ClearTexture = 0x00030016, // WGPUNativeFeature_ClearTexture = 0x00030016,
WGPUNativeFeature_SpirvShaderPassthrough = 0x00030017, WGPUNativeFeature_SpirvShaderPassthrough = 0x00030017,
// WGPUNativeFeature_Multiview = 0x00030018, // WGPUNativeFeature_Multiview = 0x00030018,
WGPUNativeFeature_VertexAttribute64bit = 0x00030019, WGPUNativeFeature_VertexAttribute64bit = 0x00030019,
WGPUNativeFeature_TextureFormatNv12 = 0x0003001A, WGPUNativeFeature_TextureFormatNv12 = 0x0003001A,
WGPUNativeFeature_RayTracingAccelerationStructure = 0x0003001B,
WGPUNativeFeature_RayQuery = 0x0003001C, WGPUNativeFeature_RayQuery = 0x0003001C,
WGPUNativeFeature_ShaderF64 = 0x0003001D, WGPUNativeFeature_ShaderF64 = 0x0003001D,
WGPUNativeFeature_ShaderI16 = 0x0003001E, WGPUNativeFeature_ShaderI16 = 0x0003001E,
@ -55,6 +55,7 @@ typedef enum WGPUNativeFeature {
WGPUNativeFeature_SubgroupBarrier = 0x00030023, WGPUNativeFeature_SubgroupBarrier = 0x00030023,
WGPUNativeFeature_TimestampQueryInsideEncoders = 0x00030024, WGPUNativeFeature_TimestampQueryInsideEncoders = 0x00030024,
WGPUNativeFeature_TimestampQueryInsidePasses = 0x00030025, WGPUNativeFeature_TimestampQueryInsidePasses = 0x00030025,
WGPUNativeFeature_ShaderInt64 = 0x00030026,
WGPUNativeFeature_Force32 = 0x7FFFFFFF WGPUNativeFeature_Force32 = 0x7FFFFFFF
} WGPUNativeFeature; } WGPUNativeFeature;
@ -143,9 +144,11 @@ typedef struct WGPUInstanceExtras {
WGPUDx12Compiler dx12ShaderCompiler; WGPUDx12Compiler dx12ShaderCompiler;
WGPUGles3MinorVersion gles3MinorVersion; WGPUGles3MinorVersion gles3MinorVersion;
WGPUGLFenceBehaviour glFenceBehaviour; WGPUGLFenceBehaviour glFenceBehaviour;
WGPUStringView dxilPath;
WGPUStringView dxcPath; WGPUStringView dxcPath;
WGPUDxcMaxShaderModel dxcMaxShaderModel; WGPUDxcMaxShaderModel dxcMaxShaderModel;
WGPU_NULLABLE const uint8_t* budgetForDeviceCreation;
WGPU_NULLABLE const uint8_t* budgetForDeviceLoss;
} WGPUInstanceExtras; } WGPUInstanceExtras;
typedef struct WGPUDeviceExtras { typedef struct WGPUDeviceExtras {
@ -256,6 +259,30 @@ typedef struct WGPUSurfaceConfigurationExtras {
uint32_t desiredMaximumFrameLatency; uint32_t desiredMaximumFrameLatency;
} WGPUSurfaceConfigurationExtras WGPU_STRUCTURE_ATTRIBUTE; } WGPUSurfaceConfigurationExtras WGPU_STRUCTURE_ATTRIBUTE;
/**
* Chained in @ref WGPUSurfaceDescriptor to make a @ref WGPUSurface wrapping a WinUI [`SwapChainPanel`](https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.swapchainpanel).
*/
typedef struct WGPUSurfaceSourceSwapChainPanel {
WGPUChainedStruct chain;
/**
* A pointer to the [`ISwapChainPanelNative`](https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/win32/microsoft.ui.xaml.media.dxinterop/nn-microsoft-ui-xaml-media-dxinterop-iswapchainpanelnative)
* interface of the SwapChainPanel that will be wrapped by the @ref WGPUSurface.
*/
void * panelNative;
} WGPUSurfaceSourceSwapChainPanel WGPU_STRUCTURE_ATTRIBUTE;
typedef enum WGPUPolygonMode {
WGPUPolygonMode_Fill = 0,
WGPUPolygonMode_Line = 1,
WGPUPolygonMode_Point = 2,
} WGPUPolygonMode;
typedef struct WGPUPrimitiveStateExtras {
WGPUChainedStruct chain;
WGPUPolygonMode polygonMode;
WGPUBool conservative;
} WGPUPrimitiveStateExtras WGPU_STRUCTURE_ATTRIBUTE;
typedef void (*WGPULogCallback)(WGPULogLevel level, WGPUStringView message, void * userdata); typedef void (*WGPULogCallback)(WGPULogLevel level, WGPUStringView message, void * userdata);
typedef enum WGPUNativeTextureFormat { typedef enum WGPUNativeTextureFormat {
@ -268,8 +295,10 @@ typedef enum WGPUNativeTextureFormat {
WGPUNativeTextureFormat_Rgba16Snorm = 0x00030006, WGPUNativeTextureFormat_Rgba16Snorm = 0x00030006,
// From Features::TEXTURE_FORMAT_NV12 // From Features::TEXTURE_FORMAT_NV12
WGPUNativeTextureFormat_NV12 = 0x00030007, WGPUNativeTextureFormat_NV12 = 0x00030007,
WGPUNativeTextureFormat_P010 = 0x00030008,
} WGPUNativeTextureFormat; } WGPUNativeTextureFormat;
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif

View file

@ -41,7 +41,7 @@ namespace psemek::wgpu
{ {
std::vector<chained_struct> chain = {}; std::vector<chained_struct> chain = {};
texture_view view; texture_view view;
std::uint32_t depth_slice = 0; std::optional<std::uint32_t> depth_slice = std::nullopt;
texture_view resolve_target = {}; texture_view resolve_target = {};
enum load_op load_op; enum load_op load_op;
enum store_op store_op; enum store_op store_op;

View file

@ -125,8 +125,21 @@ namespace psemek::wgpu
back = 0x00000003, back = 0x00000003,
}; };
enum class polygon_mode
{
fill = 0,
line = 1,
point = 2,
};
struct primitive_state struct primitive_state
{ {
struct extras
{
enum polygon_mode polygon_mode;
bool conservative;
};
std::vector<chained_struct> chain = {}; std::vector<chained_struct> chain = {};
primitive_topology topology; primitive_topology topology;
index_format strip_index_format = index_format::undefined; index_format strip_index_format = index_format::undefined;
@ -281,4 +294,6 @@ namespace psemek::wgpu
friend struct device; friend struct device;
}; };
detail::chained_struct_ptr to_chained_struct(primitive_state::extras const &);
} }

View file

@ -126,6 +126,7 @@ namespace psemek::wgpu
// texture_format_nv12 // texture_format_nv12
nv12 = 0x00030007, nv12 = 0x00030007,
p010 = 0x00030008,
}; };
enum class usage : std::uint64_t enum class usage : std::uint64_t

View file

@ -31,7 +31,7 @@ namespace psemek::wgpu
auto & dst = color_attachments.emplace_back(); auto & dst = color_attachments.emplace_back();
dst.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(src.chain); dst.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(src.chain);
dst.view = (WGPUTextureView)src.view.get(); dst.view = (WGPUTextureView)src.view.get();
dst.depthSlice = src.depth_slice; dst.depthSlice = src.depth_slice.value_or(WGPU_DEPTH_SLICE_UNDEFINED);
dst.resolveTarget = (WGPUTextureView)src.resolve_target.get(); dst.resolveTarget = (WGPUTextureView)src.resolve_target.get();
dst.loadOp = (WGPULoadOp)src.load_op; dst.loadOp = (WGPULoadOp)src.load_op;
dst.storeOp = (WGPUStoreOp)src.store_op; dst.storeOp = (WGPUStoreOp)src.store_op;

View file

@ -1,6 +1,6 @@
#include <psemek/wgpu/render_pipeline.hpp> #include <psemek/wgpu/render_pipeline.hpp>
#include <psemek/wgpu/detail/string_view.hpp> #include <psemek/wgpu/detail/string_view.hpp>
#include <psemek/wgpu/external/webgpu.h> #include <psemek/wgpu/external/wgpu.h>
namespace psemek::wgpu namespace psemek::wgpu
{ {
@ -25,4 +25,13 @@ namespace psemek::wgpu
wgpuRenderPipelineRelease((WGPURenderPipeline)ptr); wgpuRenderPipelineRelease((WGPURenderPipeline)ptr);
} }
detail::chained_struct_ptr to_chained_struct(primitive_state::extras const & extras)
{
WGPUPrimitiveStateExtras chained = {};
chained.chain.sType = (WGPUSType)WGPUSType_PrimitiveStateExtras;
chained.polygonMode = (WGPUPolygonMode)extras.polygon_mode;
chained.conservative = extras.conservative;
return detail::make_chained_struct(chained);
}
} }