#ifndef SHADER_PASS_WATER_COMMON #define SHADER_PASS_WATER_COMMON // #pragma enable_d3d11_debug_symbols // Given that the geometry is either procedural or a mesh given by the user, we only need this as an input struct VaryingsToPS { VaryingsMeshToPS vmesh; }; struct PackedVaryingsToPS { PackedVaryingsMeshToPS vmesh; // SGVs must be packed after all non-SGVs have been packed. // If there are several SGVs, they are packed in the order of HLSL declaration. UNITY_VERTEX_OUTPUT_STEREO #if defined(PLATFORM_SUPPORTS_PRIMITIVE_ID_IN_PIXEL_SHADER) && SHADER_STAGE_FRAGMENT #if (defined(VARYINGS_NEED_PRIMITIVEID) || (SHADERPASS == SHADERPASS_FULL_SCREEN_DEBUG)) uint primitiveID : SV_PrimitiveID; #endif #endif #if defined(SHADER_STAGE_FRAGMENT) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryingsToPS PackVaryingsToPS(VaryingsToPS input) { PackedVaryingsToPS output; output.vmesh = PackVaryingsMeshToPS(input.vmesh); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); return output; } // We only need the tessellation version #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/WaterVertexTessellation.hlsl" FragInputs UnpackVaryingsToFragInputs(PackedVaryingsToPS packedInput) { FragInputs input = UnpackVaryingsMeshToFragInputs(packedInput.vmesh); #if defined(PLATFORM_SUPPORTS_PRIMITIVE_ID_IN_PIXEL_SHADER) && SHADER_STAGE_FRAGMENT #if (defined(VARYINGS_NEED_PRIMITIVEID) || (SHADERPASS == SHADERPASS_FULL_SCREEN_DEBUG)) input.primitiveID = packedInput.primitiveID; #endif #endif #if defined(VARYINGS_NEED_CULLFACE) && SHADER_STAGE_FRAGMENT input.isFrontFace = IS_FRONT_VFACE(packedInput.cullFace, true, false); #endif return input; } #endif // SHADER_PASS_WATER_COMMON