/* * 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. * */ #pragma once #include #include #include #include #include #include #include #include #include "AzslBuilder.h" namespace AZ { namespace Data { class AssetHandler; } namespace ShaderBuilder { struct SrgData; struct TypeIdPair; class SrgLayoutBuilder : public AssetBuilderSDK::AssetBuilderCommandBus::Handler { public: SrgLayoutBuilder(); ~SrgLayoutBuilder(); // An *.srgi file is nothing more than a regular azsl file that simply includes a set of srg/azsli // files, and in turn each one of those included files define "partial ShaderResourceGroup"s, which are // merged into a single ShaderResourceGroup by the shader compiler. // So, *.srgi are supposed to include files that only define "partial" SRGs. // And any file that defines a ShaderResourceGroup it should not be "partial" unless it is supposed // to be included by a *.srgi file. static constexpr const char* MergedPartialSrgsExtension = AzslBuilder::SrgIncludeExtension; static constexpr const char* SrgLayoutBuilderName = "SrgLayoutBuilder"; static constexpr const char* SrgLayoutBuilderJobKey = "Shader Resource Group Layout"; // Asset Builder Callback Functions void CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) const; void ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response) const; ////////////////////////////////////////////////////////////////////////// // AssetBuilderSDK::AssetBuilderCommandBus interface void ShutDown() override; ////////////////////////////////////////////////////////////////////////// void Activate(); void Deactivate(); static AZ::Uuid GetUUID(); static void Reflect(AZ::ReflectContext* context); private: AZ_DISABLE_COPY_MOVE(SrgLayoutBuilder); static void CreateSRGAsset( AZStd::string fullSourcePath, const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response, AssetBuilderSDK::JobCancelListener& jobCancelListener); }; } // ShaderBuilder } // AZ