/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #include #define THREADS 16 ShaderResourceGroup PassSrg : SRG_PerPass { Texture2D m_depthFullRes; RWTexture2D m_depthHalfRes; } [numthreads(THREADS, THREADS, 1)] void MainCS(uint3 dispatch_id: SV_DispatchThreadID) { uint2 targetPixel = dispatch_id.xy; // Take the upper left pixel in the 2x2 quad. This has two advantages: // 1) It gives us a real depth value instead of an averaged depth // 2) It preserves equal distance properties between pixels (necessary for SSAO) uint2 sourcePixel = targetPixel * 2; PassSrg::m_depthHalfRes[targetPixel] = PassSrg::m_depthFullRes[sourcePixel]; }