#pragma once #include #include "dxso_common.h" #include "dxso_decoder.h" namespace dxvk { enum class DxsoBindingType : uint32_t { ConstantBuffer, Image, }; enum DxsoConstantBuffers : uint32_t { VSConstantBuffer = 0, VSClipPlanes = 1, VSFixedFunction = 2, VSVertexBlendData = 3, VSCount, PSConstantBuffer = 0, PSFixedFunction = 1, PSShared = 2, PSCount }; constexpr uint32_t computeResourceSlotId( DxsoProgramType shaderStage, DxsoBindingType bindingType, uint32_t bindingIndex) { const uint32_t stageOffset = 8 * uint32_t(shaderStage); if (bindingType == DxsoBindingType::ConstantBuffer) return bindingIndex + stageOffset; else // if (bindingType == DxsoBindingType::Image) return bindingIndex + stageOffset + (shaderStage == DxsoProgramType::PixelShader ? PSCount : VSCount); } // TODO: Intergrate into compute resource slot ID/refactor all of this? constexpr uint32_t getSWVPBufferSlot() { return 27; // From last pixel shader slot, above. } uint32_t RegisterLinkerSlot(DxsoSemantic semantic); }