dxvk/src/dxso/dxso_util.h

47 lines
1.1 KiB
C
Raw Normal View History

#pragma once
#include <cstdint>
#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);
}