Bug 262346

Summary: [WGSL] Overrides with default values have initializers which doesn't compile
Product: WebKit Reporter: Mike Wyrzykowski <mwyrzykowski>
Component: WebGPUAssignee: Nobody <webkit-unassigned>
Status: NEW ---    
Severity: Normal CC: webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: Other   
Hardware: Unspecified   
OS: Unspecified   

Description Mike Wyrzykowski 2023-09-28 16:46:03 PDT
[WGSL] Overrides with default values have initializers which doesn't compile

Opening https://webgpu.github.io/webgpu-samples/samples/shadowMapping

results in the following error:

program_source:58:47: error: an attribute list cannot appear here
  constant float shadowDepthTextureSize = 1024. [[function_constant(0)]];

as the generated metal looks like:
  constant float shadowDepthTextureSize = 1024. [[function_constant(0)]];

instead it should be:
  constant float shadowDepthTextureSize [[function_constant(0)]];

and the default value of 1024 should be returned in likely SpecializationConstant:

  struct SpecializationConstant {
      String mangledName;
      SpecializationConstantType type;
      String value; // <-- new member, or alternatively, std::variant<bool, float, int, unsigned, __fp16>
  };

Also it would be nice to add "Half" to SpecializationConstantType, that could be done separately.


Then the default can be used in:

  MTLFunctionConstantValues *createConstantValues(uint32_t constantCount, const WGPUConstantEntry* constants, const WGSL::Reflection::EntryPointInformation& entryPointInformation)
Comment 1 Radar WebKit Bug Importer 2023-09-28 16:46:26 PDT
<rdar://problem/116209279>