mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-01-05 19:46:15 +01:00
127 lines
3.3 KiB
C++
127 lines
3.3 KiB
C++
#pragma once
|
|
|
|
#include "dxbc_common.h"
|
|
#include "dxbc_enums.h"
|
|
|
|
namespace dxvk {
|
|
|
|
/**
|
|
* \brief Push constant struct
|
|
*/
|
|
struct DxbcPushConstants {
|
|
uint32_t rasterizerSampleCount;
|
|
};
|
|
|
|
|
|
/**
|
|
* \brief Binding numbers and properties
|
|
*/
|
|
enum DxbcBindingProperties : uint32_t {
|
|
DxbcConstBufBindingIndex = 0,
|
|
DxbcConstBufBindingCount = 16,
|
|
DxbcSamplerBindingIndex = DxbcConstBufBindingIndex
|
|
+ DxbcConstBufBindingCount,
|
|
DxbcSamplerBindingCount = 16,
|
|
DxbcResourceBindingIndex = DxbcSamplerBindingIndex
|
|
+ DxbcSamplerBindingCount,
|
|
DxbcResourceBindingCount = 128,
|
|
DxbcStageBindingCount = DxbcConstBufBindingCount
|
|
+ DxbcSamplerBindingCount
|
|
+ DxbcResourceBindingCount,
|
|
DxbcUavBindingIndex = DxbcStageBindingCount * 6,
|
|
DxbcUavBindingCount = 64,
|
|
};
|
|
|
|
|
|
/**
|
|
* \brief Computes first binding index for a given stage
|
|
*
|
|
* \param [in] stage The shader stage
|
|
* \returns Index of first binding
|
|
*/
|
|
inline uint32_t computeStageBindingOffset(DxbcProgramType stage) {
|
|
return DxbcStageBindingCount * uint32_t(stage);
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Computes first UAV binding index offset for a given stage
|
|
*
|
|
* \param [in] stage The shader stage
|
|
* \returns Index of first UAV binding
|
|
*/
|
|
inline uint32_t computeStageUavBindingOffset(DxbcProgramType stage) {
|
|
return DxbcUavBindingIndex
|
|
+ DxbcUavBindingCount * (stage == DxbcProgramType::ComputeShader ? 2 : 0);
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Computes constant buffer binding index
|
|
*
|
|
* \param [in] stage Shader stage
|
|
* \param [in] index Constant buffer index
|
|
* \returns Binding index
|
|
*/
|
|
inline uint32_t computeConstantBufferBinding(DxbcProgramType stage, uint32_t index) {
|
|
return computeStageBindingOffset(stage) + DxbcConstBufBindingIndex + index;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Computes sampler binding index
|
|
*
|
|
* \param [in] stage Shader stage
|
|
* \param [in] index Sampler index
|
|
* \returns Binding index
|
|
*/
|
|
inline uint32_t computeSamplerBinding(DxbcProgramType stage, uint32_t index) {
|
|
return computeStageBindingOffset(stage) + DxbcSamplerBindingIndex + index;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Computes resource binding index
|
|
*
|
|
* \param [in] stage Shader stage
|
|
* \param [in] index Resource index
|
|
* \returns Binding index
|
|
*/
|
|
inline uint32_t computeSrvBinding(DxbcProgramType stage, uint32_t index) {
|
|
return computeStageBindingOffset(stage) + DxbcResourceBindingIndex + index;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Computes UAV binding offset
|
|
*
|
|
* \param [in] stage Shader stage
|
|
* \param [in] index UAV index
|
|
* \returns Binding index
|
|
*/
|
|
inline uint32_t computeUavBinding(DxbcProgramType stage, uint32_t index) {
|
|
return computeStageUavBindingOffset(stage) + index;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Computes UAV counter binding offset
|
|
*
|
|
* \param [in] stage Shader stage
|
|
* \param [in] index UAV index
|
|
* \returns Binding index
|
|
*/
|
|
inline uint32_t computeUavCounterBinding(DxbcProgramType stage, uint32_t index) {
|
|
return computeStageUavBindingOffset(stage) + DxbcUavBindingCount + index;
|
|
}
|
|
|
|
/**
|
|
* \brief Primitive vertex count
|
|
*
|
|
* Calculates the number of vertices
|
|
* for a given primitive type.
|
|
*/
|
|
uint32_t primitiveVertexCount(
|
|
DxbcPrimitive primitive);
|
|
|
|
} |