text: // ======================================================================== //
  // Copyright 2019 David Ganter                                              //
  //                                                                          //
  // Licensed under the Apache License, Version 2.0 (the "License");          //
  // you may not use this file except in compliance with the License.         //
  // You may obtain a copy of the License at                                  //
  //                                                                          //
  //     http://www.apache.org/licenses/LICENSE-2.0                           //
  //                                                                          //
  // Unless required by applicable law or agreed to in writing, software      //
  // distributed under the License is distributed on an "AS IS" BASIS,        //
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //
  // See the License for the specific language governing permissions and      //
  // limitations under the License.                                           //
  // ======================================================================== //
  
  #pragma once
  
  #include "vec.h"
  
  struct PerRayData {
    struct {
      float3 rayDirectionInverse;
      float worldSpaceStepSize;
      float worldSpaceStepSizeInv;
      vec3f poolSpaceStep;
      vec3f volumeSpaceStep;
      float opacityCorrection;
    } in;
  
    struct {
      float entryDistance;
      float exitDistance;
    } hit;
  
    struct {
      vec4f accumulation;
      unsigned int pageTableAccesses;
    } out;
  
    bool rayTerminated;
  };
  