Vixen
02b45cc4
csharp
public record class EffectData

One compiled variant of a shader, in a form that outlives the process that compiled it and needs nothing from the compiler to read.

No guide page documents this yet — the page shows what the code says about itself.

Remarks

This is what makes "zero runtime shader compilation" a structural claim rather than a policy. Raven's own .rvnfx already holds bytecode and reflection — but CompiledEffectReader lives in the compiler assembly, so a runtime that read one would link the parser, the lowerer and both backends. Every tier below the in-memory dictionary reads this instead: the disk cache, the baked bundle and the answer that comes back over TCP are all the same record, and translating a .rvnfx into it happens once, on the build side, in the one place that is allowed to know both.

It is device-independent on purpose. Descriptor set layouts and a pipeline layout are handles owned by a device that did not exist when this was baked, so what is stored is the description and EffectLoader creates the handles. Baking handles would make a bundle valid for exactly one run of one process.

SourceHash and Target are carried but not part of the identity: two artefacts for the same EffectKey from different sources are the same variant, and the hash is what says whether one of them is stale.

Fields and properties (11)

  • public string ShaderName

    The shader this is a variant of.

  • public EffectPermutationValue[] Permutations

    The permutation values that selected it — only the keys it read.

  • public EffectComposeBinding[] Composition

    What filled its compose slots.

  • public string Target

    The backend that produced the modules, as Raven's TargetBackends names it.

  • public string SourceHash

    A hash of the source it was compiled from, for detecting a stale artefact.

  • public EffectStageData[] Stages

    The compiled stages.

  • public EffectBindingData[] Bindings

    Every resource it binds.

  • public int ConstantBufferSize

    How many bytes its uniform block needs.

  • public EffectParameterData[] Parameters

    Every value in that block, one entry per value.

  • public EffectPushConstantData[] PushConstants

    The push-constant ranges its pipeline layout has to declare.

  • public EffectVertexInputData[] VertexInputs

    The vertex attributes its vertex stage reads, with the locations it reads them at.

Methods (1)

  • public EffectKey ToKey()

    The key that selects this variant.

Used by (32)

  • BindlessSamplingDeviceTestsVixen.Graphics.Golden.Tests
  • BindlessSetLayoutTestsVixen.Shaders.Tests
  • BufferTransferDeviceTestsVixen.Graphics.Golden.Tests
  • ClusterCullingDeviceTestsVixen.Graphics.Golden.Tests
  • ClusteredShadingDeviceTestsVixen.Graphics.Golden.Tests
  • CompilerVixen.Graphics.Golden.Tests
  • CountedVixen.Shaders.Tests
  • DistanceFieldDeviceTestsVixen.Graphics.Golden.Tests
  • EffectBundleVixen.Shaders
  • EffectCacheTestsVixen.Shaders.Tests
  • EffectCompileResponseVixen.Shaders
  • EffectDiskCacheVixen.Shaders
  • EffectLoaderVixen.Shaders
  • EffectStoreVixen.Shaders
  • ForwardFrameTestsVixen.Rendering.Tests
  • IEffectSourceVixen.Shaders
  • IrradianceShadingDeviceTestsVixen.Graphics.Golden.Tests
  • RemoteEffectSourceVixen.Shaders
  • ScreenProbeUpsampleCompileTestsVixen.Graphics.Golden.Tests
  • TypeRegistrationVixen.Shaders
  • ViewCullingDeviceTestsVixen.Graphics.Golden.Tests
  • Vixen_Shaders_EffectBundleSerializerVixen.Shaders
  • Vixen_Shaders_EffectCompileResponseSerializerVixen.Shaders
  • Vixen_Shaders_EffectDataSerializerVixen.Shaders
  • ContentMountTestsVixen.App.Tests
  • EffectBundleBuilderVixen.ShaderCompiler
  • EffectCompilerTestsVixen.ShaderCompiler.Tests
  • EffectTranslatorVixen.ShaderCompiler
  • PermutationClosureVixen.ShaderCompiler
  • PermutationClosureResultVixen.ShaderCompiler
  • RavenEffectCompilerVixen.ShaderCompiler
  • ShaderCompilerServiceTestsVixen.ShaderCompilerService.Tests