Vixen
dd8b0a81
csharp
public interface ITextureCpuOperation

An operation in a plan that runs on the CPU rather than as a compute dispatch.

Read the guide page for this →

Remarks

⚠ A deliberate exception to doc 48 § D3, and it exists for exactly one node. § D3 says every atomic operation is a Raven compute shader and that there is no CPU implementation of any node — because a CPU twin of a kernel turns every parity test into a claim that two transcriptions agree rather than that either is right. § 4.6 names the one entry in the catalogue that is not a kernel: Normal → Height is a Poisson solve, and doc 42 § B1's Vixen.Geometry.Uv/Solving/ConjugateGradient.cs is the solver. #688 is the finding that a plan could not express it at all.

⚠ What stops this becoming the norm is that it is not an escape hatch from writing a kernel — it is a much worse way to compute a picture, and the cost is structural. A dispatch is recorded into the list already in flight; a CPU op ends that list, waits for the device, copies every input into host memory, runs single-threaded, copies the answer back and starts a new list. That is two full pipeline drains in the middle of a bake, plus the bandwidth, and a chain of them serialises the entire evaluation. The test of whether a node belongs here is not "would this be easier in C#" — it is "is there a GPU formulation at all". For a Poisson solve there is not one worth having: low frequencies converge in O(n²) Jacobi sweeps on a grid this size, so the GPU version is thousands of dispatches and a different convergence story from the one § 4.6 specified. Anything that can be a kernel is a kernel, and § D5's "anything that has to be written in C# to be fast is a bug in the atomic set" is the standing test.

It is not a place for a CPU twin either. An implementation here that reproduces what some .rvn already does is the thing § D3 bans, whatever this interface makes possible — and it would be found by the same parity test being meaningless.

Fields and properties (1)

  • string Name

    What to call this in a message, when the op's own kernel name is not enough.

Methods (1)

Used by (8)

  • NormalToHeightOperationVixen.Editor.TextureGraph
  • RecordTheInputVixen.Editor.TextureGraph.Tests
  • TextureKernelSabotageTestsVixen.Editor.TextureGraph.Tests
  • TextureNormalToHeightDeviceTestsVixen.Editor.TextureGraph.Tests
  • TextureNormalToHeightTestsVixen.Editor.TextureGraph.Tests
  • TextureOpVixen.Editor.TextureGraph
  • TexturePlanEvaluatorVixen.Editor.TextureGraph
  • TransposeRgba8Vixen.Editor.TextureGraph.Tests