329 lines
14 KiB
C
329 lines
14 KiB
C
#ifndef WGPU_H_
|
|
#define WGPU_H_
|
|
|
|
#include "webgpu.h"
|
|
|
|
typedef enum WGPUNativeSType {
|
|
// Start at 0003 since that's allocated range for wgpu-native
|
|
WGPUSType_DeviceExtras = 0x00030001,
|
|
WGPUSType_NativeLimits = 0x00030002,
|
|
WGPUSType_PipelineLayoutExtras = 0x00030003,
|
|
WGPUSType_ShaderSourceGLSL = 0x00030004,
|
|
WGPUSType_InstanceExtras = 0x00030006,
|
|
WGPUSType_BindGroupEntryExtras = 0x00030007,
|
|
WGPUSType_BindGroupLayoutEntryExtras = 0x00030008,
|
|
WGPUSType_QuerySetDescriptorExtras = 0x00030009,
|
|
WGPUSType_SurfaceConfigurationExtras = 0x0003000A,
|
|
WGPUSType_SurfaceSourceSwapChainPanel = 0x0003000B,
|
|
WGPUNativeSType_Force32 = 0x7FFFFFFF
|
|
} WGPUNativeSType;
|
|
|
|
typedef enum WGPUNativeFeature {
|
|
WGPUNativeFeature_PushConstants = 0x00030001,
|
|
WGPUNativeFeature_TextureAdapterSpecificFormatFeatures = 0x00030002,
|
|
WGPUNativeFeature_MultiDrawIndirect = 0x00030003,
|
|
WGPUNativeFeature_MultiDrawIndirectCount = 0x00030004,
|
|
WGPUNativeFeature_VertexWritableStorage = 0x00030005,
|
|
WGPUNativeFeature_TextureBindingArray = 0x00030006,
|
|
WGPUNativeFeature_SampledTextureAndStorageBufferArrayNonUniformIndexing = 0x00030007,
|
|
WGPUNativeFeature_PipelineStatisticsQuery = 0x00030008,
|
|
WGPUNativeFeature_StorageResourceBindingArray = 0x00030009,
|
|
WGPUNativeFeature_PartiallyBoundBindingArray = 0x0003000A,
|
|
WGPUNativeFeature_TextureFormat16bitNorm = 0x0003000B,
|
|
WGPUNativeFeature_TextureCompressionAstcHdr = 0x0003000C,
|
|
WGPUNativeFeature_MappablePrimaryBuffers = 0x0003000E,
|
|
WGPUNativeFeature_BufferBindingArray = 0x0003000F,
|
|
WGPUNativeFeature_UniformBufferAndStorageTextureArrayNonUniformIndexing = 0x00030010,
|
|
// TODO: requires wgpu.h api change
|
|
// WGPUNativeFeature_AddressModeClampToZero = 0x00030011,
|
|
// WGPUNativeFeature_AddressModeClampToBorder = 0x00030012,
|
|
// WGPUNativeFeature_PolygonModeLine = 0x00030013,
|
|
// WGPUNativeFeature_PolygonModePoint = 0x00030014,
|
|
// WGPUNativeFeature_ConservativeRasterization = 0x00030015,
|
|
// WGPUNativeFeature_ClearTexture = 0x00030016,
|
|
WGPUNativeFeature_SpirvShaderPassthrough = 0x00030017,
|
|
// WGPUNativeFeature_Multiview = 0x00030018,
|
|
WGPUNativeFeature_VertexAttribute64bit = 0x00030019,
|
|
WGPUNativeFeature_TextureFormatNv12 = 0x0003001A,
|
|
WGPUNativeFeature_RayTracingAccelerationStructure = 0x0003001B,
|
|
WGPUNativeFeature_RayQuery = 0x0003001C,
|
|
WGPUNativeFeature_ShaderF64 = 0x0003001D,
|
|
WGPUNativeFeature_ShaderI16 = 0x0003001E,
|
|
WGPUNativeFeature_ShaderPrimitiveIndex = 0x0003001F,
|
|
WGPUNativeFeature_ShaderEarlyDepthTest = 0x00030020,
|
|
WGPUNativeFeature_Subgroup = 0x00030021,
|
|
WGPUNativeFeature_SubgroupVertex = 0x00030022,
|
|
WGPUNativeFeature_SubgroupBarrier = 0x00030023,
|
|
WGPUNativeFeature_TimestampQueryInsideEncoders = 0x00030024,
|
|
WGPUNativeFeature_TimestampQueryInsidePasses = 0x00030025,
|
|
WGPUNativeFeature_ShaderInt64 = 0x00030026,
|
|
WGPUNativeFeature_Force32 = 0x7FFFFFFF
|
|
} WGPUNativeFeature;
|
|
|
|
typedef enum WGPULogLevel {
|
|
WGPULogLevel_Off = 0x00000000,
|
|
WGPULogLevel_Error = 0x00000001,
|
|
WGPULogLevel_Warn = 0x00000002,
|
|
WGPULogLevel_Info = 0x00000003,
|
|
WGPULogLevel_Debug = 0x00000004,
|
|
WGPULogLevel_Trace = 0x00000005,
|
|
WGPULogLevel_Force32 = 0x7FFFFFFF
|
|
} WGPULogLevel;
|
|
|
|
typedef WGPUFlags WGPUInstanceBackend;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_All = 0x00000000;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_Vulkan = 1 << 0;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_GL = 1 << 1;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_Metal = 1 << 2;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_DX12 = 1 << 3;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_DX11 = 1 << 4;
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_BrowserWebGPU = 1 << 5;
|
|
// Vulkan, Metal, DX12 and BrowserWebGPU
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_Primary = (1 << 0) | (1 << 2) | (1 << 3) | (1 << 5);
|
|
// GL and DX11
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_Secondary = (1 << 1) | (1 << 4);
|
|
static const WGPUInstanceBackend WGPUInstanceBackend_Force32 = 0x7FFFFFFF;
|
|
|
|
typedef WGPUFlags WGPUInstanceFlag;
|
|
static const WGPUInstanceFlag WGPUInstanceFlag_Default = 0x00000000;
|
|
static const WGPUInstanceFlag WGPUInstanceFlag_Debug = 1 << 0;
|
|
static const WGPUInstanceFlag WGPUInstanceFlag_Validation = 1 << 1;
|
|
static const WGPUInstanceFlag WGPUInstanceFlag_DiscardHalLabels = 1 << 2;
|
|
static const WGPUInstanceFlag WGPUInstanceFlag_Force32 = 0x7FFFFFFF;
|
|
|
|
typedef enum WGPUDx12Compiler {
|
|
WGPUDx12Compiler_Undefined = 0x00000000,
|
|
WGPUDx12Compiler_Fxc = 0x00000001,
|
|
WGPUDx12Compiler_Dxc = 0x00000002,
|
|
WGPUDx12Compiler_Force32 = 0x7FFFFFFF
|
|
} WGPUDx12Compiler;
|
|
|
|
typedef enum WGPUGles3MinorVersion {
|
|
WGPUGles3MinorVersion_Automatic = 0x00000000,
|
|
WGPUGles3MinorVersion_Version0 = 0x00000001,
|
|
WGPUGles3MinorVersion_Version1 = 0x00000002,
|
|
WGPUGles3MinorVersion_Version2 = 0x00000003,
|
|
WGPUGles3MinorVersion_Force32 = 0x7FFFFFFF
|
|
} WGPUGles3MinorVersion;
|
|
|
|
typedef enum WGPUPipelineStatisticName {
|
|
WGPUPipelineStatisticName_VertexShaderInvocations = 0x00000000,
|
|
WGPUPipelineStatisticName_ClipperInvocations = 0x00000001,
|
|
WGPUPipelineStatisticName_ClipperPrimitivesOut = 0x00000002,
|
|
WGPUPipelineStatisticName_FragmentShaderInvocations = 0x00000003,
|
|
WGPUPipelineStatisticName_ComputeShaderInvocations = 0x00000004,
|
|
WGPUPipelineStatisticName_Force32 = 0x7FFFFFFF
|
|
} WGPUPipelineStatisticName WGPU_ENUM_ATTRIBUTE;
|
|
|
|
typedef enum WGPUNativeQueryType {
|
|
WGPUNativeQueryType_PipelineStatistics = 0x00030000,
|
|
WGPUNativeQueryType_Force32 = 0x7FFFFFFF
|
|
} WGPUNativeQueryType WGPU_ENUM_ATTRIBUTE;
|
|
|
|
typedef enum WGPUDxcMaxShaderModel {
|
|
WGPUDxcMaxShaderModel_V6_0 = 0x00000000,
|
|
WGPUDxcMaxShaderModel_V6_1 = 0x00000001,
|
|
WGPUDxcMaxShaderModel_V6_2 = 0x00000002,
|
|
WGPUDxcMaxShaderModel_V6_3 = 0x00000003,
|
|
WGPUDxcMaxShaderModel_V6_4 = 0x00000004,
|
|
WGPUDxcMaxShaderModel_V6_5 = 0x00000005,
|
|
WGPUDxcMaxShaderModel_V6_6 = 0x00000006,
|
|
WGPUDxcMaxShaderModel_V6_7 = 0x00000007,
|
|
WGPUDxcMaxShaderModel_Force32 = 0x7FFFFFFF
|
|
} WGPUDxcMaxShaderModel;
|
|
|
|
typedef enum WGPUGLFenceBehaviour {
|
|
WGPUGLFenceBehaviour_Normal = 0x00000000,
|
|
WGPUGLFenceBehaviour_AutoFinish = 0x00000001,
|
|
WGPUGLFenceBehaviour_Force32 = 0x7FFFFFFF
|
|
} WGPUGLFenceBehaviour;
|
|
|
|
typedef struct WGPUInstanceExtras {
|
|
WGPUChainedStruct chain;
|
|
WGPUInstanceBackend backends;
|
|
WGPUInstanceFlag flags;
|
|
WGPUDx12Compiler dx12ShaderCompiler;
|
|
WGPUGles3MinorVersion gles3MinorVersion;
|
|
WGPUGLFenceBehaviour glFenceBehaviour;
|
|
WGPUStringView dxilPath;
|
|
WGPUStringView dxcPath;
|
|
WGPUDxcMaxShaderModel dxcMaxShaderModel;
|
|
} WGPUInstanceExtras;
|
|
|
|
typedef struct WGPUDeviceExtras {
|
|
WGPUChainedStruct chain;
|
|
WGPUStringView tracePath;
|
|
} WGPUDeviceExtras;
|
|
|
|
typedef struct WGPUNativeLimits {
|
|
/** This struct chain is used as mutable in some places and immutable in others. */
|
|
WGPUChainedStructOut chain;
|
|
uint32_t maxPushConstantSize;
|
|
uint32_t maxNonSamplerBindings;
|
|
} WGPUNativeLimits;
|
|
|
|
typedef struct WGPUPushConstantRange {
|
|
WGPUShaderStage stages;
|
|
uint32_t start;
|
|
uint32_t end;
|
|
} WGPUPushConstantRange;
|
|
|
|
typedef struct WGPUPipelineLayoutExtras {
|
|
WGPUChainedStruct chain;
|
|
size_t pushConstantRangeCount;
|
|
WGPUPushConstantRange const * pushConstantRanges;
|
|
} WGPUPipelineLayoutExtras;
|
|
|
|
typedef uint64_t WGPUSubmissionIndex;
|
|
|
|
typedef struct WGPUShaderDefine {
|
|
WGPUStringView name;
|
|
WGPUStringView value;
|
|
} WGPUShaderDefine;
|
|
|
|
typedef struct WGPUShaderSourceGLSL {
|
|
WGPUChainedStruct chain;
|
|
WGPUShaderStage stage;
|
|
WGPUStringView code;
|
|
uint32_t defineCount;
|
|
WGPUShaderDefine * defines;
|
|
} WGPUShaderSourceGLSL;
|
|
|
|
typedef struct WGPUShaderModuleDescriptorSpirV {
|
|
WGPUStringView label;
|
|
uint32_t sourceSize;
|
|
uint32_t const * source;
|
|
} WGPUShaderModuleDescriptorSpirV;
|
|
|
|
typedef struct WGPURegistryReport {
|
|
size_t numAllocated;
|
|
size_t numKeptFromUser;
|
|
size_t numReleasedFromUser;
|
|
size_t elementSize;
|
|
} WGPURegistryReport;
|
|
|
|
typedef struct WGPUHubReport {
|
|
WGPURegistryReport adapters;
|
|
WGPURegistryReport devices;
|
|
WGPURegistryReport queues;
|
|
WGPURegistryReport pipelineLayouts;
|
|
WGPURegistryReport shaderModules;
|
|
WGPURegistryReport bindGroupLayouts;
|
|
WGPURegistryReport bindGroups;
|
|
WGPURegistryReport commandBuffers;
|
|
WGPURegistryReport renderBundles;
|
|
WGPURegistryReport renderPipelines;
|
|
WGPURegistryReport computePipelines;
|
|
WGPURegistryReport pipelineCaches;
|
|
WGPURegistryReport querySets;
|
|
WGPURegistryReport buffers;
|
|
WGPURegistryReport textures;
|
|
WGPURegistryReport textureViews;
|
|
WGPURegistryReport samplers;
|
|
} WGPUHubReport;
|
|
|
|
typedef struct WGPUGlobalReport {
|
|
WGPURegistryReport surfaces;
|
|
WGPUHubReport hub;
|
|
} WGPUGlobalReport;
|
|
|
|
typedef struct WGPUInstanceEnumerateAdapterOptions {
|
|
WGPUChainedStruct const * nextInChain;
|
|
WGPUInstanceBackend backends;
|
|
} WGPUInstanceEnumerateAdapterOptions;
|
|
|
|
typedef struct WGPUBindGroupEntryExtras {
|
|
WGPUChainedStruct chain;
|
|
WGPUBuffer const * buffers;
|
|
size_t bufferCount;
|
|
WGPUSampler const * samplers;
|
|
size_t samplerCount;
|
|
WGPUTextureView const * textureViews;
|
|
size_t textureViewCount;
|
|
} WGPUBindGroupEntryExtras;
|
|
|
|
typedef struct WGPUBindGroupLayoutEntryExtras {
|
|
WGPUChainedStruct chain;
|
|
uint32_t count;
|
|
} WGPUBindGroupLayoutEntryExtras;
|
|
|
|
typedef struct WGPUQuerySetDescriptorExtras {
|
|
WGPUChainedStruct chain;
|
|
WGPUPipelineStatisticName const * pipelineStatistics;
|
|
size_t pipelineStatisticCount;
|
|
} WGPUQuerySetDescriptorExtras WGPU_STRUCTURE_ATTRIBUTE;
|
|
|
|
typedef struct WGPUSurfaceConfigurationExtras {
|
|
WGPUChainedStruct chain;
|
|
uint32_t desiredMaximumFrameLatency;
|
|
} 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 void (*WGPULogCallback)(WGPULogLevel level, WGPUStringView message, void * userdata);
|
|
|
|
typedef enum WGPUNativeTextureFormat {
|
|
// From Features::TEXTURE_FORMAT_16BIT_NORM
|
|
WGPUNativeTextureFormat_R16Unorm = 0x00030001,
|
|
WGPUNativeTextureFormat_R16Snorm = 0x00030002,
|
|
WGPUNativeTextureFormat_Rg16Unorm = 0x00030003,
|
|
WGPUNativeTextureFormat_Rg16Snorm = 0x00030004,
|
|
WGPUNativeTextureFormat_Rgba16Unorm = 0x00030005,
|
|
WGPUNativeTextureFormat_Rgba16Snorm = 0x00030006,
|
|
// From Features::TEXTURE_FORMAT_NV12
|
|
WGPUNativeTextureFormat_NV12 = 0x00030007,
|
|
} WGPUNativeTextureFormat;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void wgpuGenerateReport(WGPUInstance instance, WGPUGlobalReport * report);
|
|
size_t wgpuInstanceEnumerateAdapters(WGPUInstance instance, WGPU_NULLABLE WGPUInstanceEnumerateAdapterOptions const * options, WGPUAdapter * adapters);
|
|
|
|
WGPUSubmissionIndex wgpuQueueSubmitForIndex(WGPUQueue queue, size_t commandCount, WGPUCommandBuffer const * commands);
|
|
|
|
// Returns true if the queue is empty, or false if there are more queue submissions still in flight.
|
|
WGPUBool wgpuDevicePoll(WGPUDevice device, WGPUBool wait, WGPU_NULLABLE WGPUSubmissionIndex const * submissionIndex);
|
|
WGPUShaderModule wgpuDeviceCreateShaderModuleSpirV(WGPUDevice device, WGPUShaderModuleDescriptorSpirV const * descriptor);
|
|
|
|
void wgpuSetLogCallback(WGPULogCallback callback, void * userdata);
|
|
|
|
void wgpuSetLogLevel(WGPULogLevel level);
|
|
|
|
uint32_t wgpuGetVersion(void);
|
|
|
|
void wgpuRenderPassEncoderSetPushConstants(WGPURenderPassEncoder encoder, WGPUShaderStage stages, uint32_t offset, uint32_t sizeBytes, void const * data);
|
|
void wgpuComputePassEncoderSetPushConstants(WGPUComputePassEncoder encoder, uint32_t offset, uint32_t sizeBytes, void const * data);
|
|
void wgpuRenderBundleEncoderSetPushConstants(WGPURenderBundleEncoder encoder, WGPUShaderStage stages, uint32_t offset, uint32_t sizeBytes, void const * data);
|
|
|
|
void wgpuRenderPassEncoderMultiDrawIndirect(WGPURenderPassEncoder encoder, WGPUBuffer buffer, uint64_t offset, uint32_t count);
|
|
void wgpuRenderPassEncoderMultiDrawIndexedIndirect(WGPURenderPassEncoder encoder, WGPUBuffer buffer, uint64_t offset, uint32_t count);
|
|
|
|
void wgpuRenderPassEncoderMultiDrawIndirectCount(WGPURenderPassEncoder encoder, WGPUBuffer buffer, uint64_t offset, WGPUBuffer count_buffer, uint64_t count_buffer_offset, uint32_t max_count);
|
|
void wgpuRenderPassEncoderMultiDrawIndexedIndirectCount(WGPURenderPassEncoder encoder, WGPUBuffer buffer, uint64_t offset, WGPUBuffer count_buffer, uint64_t count_buffer_offset, uint32_t max_count);
|
|
|
|
void wgpuComputePassEncoderBeginPipelineStatisticsQuery(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
|
|
void wgpuComputePassEncoderEndPipelineStatisticsQuery(WGPUComputePassEncoder computePassEncoder);
|
|
void wgpuRenderPassEncoderBeginPipelineStatisticsQuery(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
|
|
void wgpuRenderPassEncoderEndPipelineStatisticsQuery(WGPURenderPassEncoder renderPassEncoder);
|
|
|
|
void wgpuComputePassEncoderWriteTimestamp(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
|
|
void wgpuRenderPassEncoderWriteTimestamp(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif
|