|
|
@ -54,25 +54,11 @@ namespace FidelityFX.FSR3 |
|
|
|
|
|
|
|
|
private readonly Fsr3UpscalerResources _resources = new Fsr3UpscalerResources(); |
|
|
private readonly Fsr3UpscalerResources _resources = new Fsr3UpscalerResources(); |
|
|
|
|
|
|
|
|
private ComputeBuffer _upscalerConstantsBuffer; |
|
|
|
|
|
private readonly Fsr3Upscaler.UpscalerConstants[] _upscalerConstantsArray = { new Fsr3Upscaler.UpscalerConstants() }; |
|
|
|
|
|
private ref Fsr3Upscaler.UpscalerConstants UpscalerConsts => ref _upscalerConstantsArray[0]; |
|
|
|
|
|
|
|
|
|
|
|
private ComputeBuffer _spdConstantsBuffer; |
|
|
|
|
|
private readonly Fsr3Upscaler.SpdConstants[] _spdConstantsArray = { new Fsr3Upscaler.SpdConstants() }; |
|
|
|
|
|
private ref Fsr3Upscaler.SpdConstants SpdConsts => ref _spdConstantsArray[0]; |
|
|
|
|
|
|
|
|
|
|
|
private ComputeBuffer _rcasConstantsBuffer; |
|
|
|
|
|
private readonly Fsr3Upscaler.RcasConstants[] _rcasConstantsArray = new Fsr3Upscaler.RcasConstants[1]; |
|
|
|
|
|
private ref Fsr3Upscaler.RcasConstants RcasConsts => ref _rcasConstantsArray[0]; |
|
|
|
|
|
|
|
|
|
|
|
private ComputeBuffer _generateReactiveConstantsBuffer; |
|
|
|
|
|
private readonly Fsr3Upscaler.GenerateReactiveConstants[] _generateReactiveConstantsArray = { new Fsr3Upscaler.GenerateReactiveConstants() }; |
|
|
|
|
|
private ref Fsr3Upscaler.GenerateReactiveConstants GenReactiveConsts => ref _generateReactiveConstantsArray[0]; |
|
|
|
|
|
|
|
|
|
|
|
private ComputeBuffer _tcrAutogenerateConstantsBuffer; |
|
|
|
|
|
private readonly Fsr3Upscaler.GenerateReactiveConstants2[] _tcrAutogenerateConstantsArray = { new Fsr3Upscaler.GenerateReactiveConstants2() }; |
|
|
|
|
|
private ref Fsr3Upscaler.GenerateReactiveConstants2 TcrAutoGenConsts => ref _tcrAutogenerateConstantsArray[0]; |
|
|
|
|
|
|
|
|
private readonly ConstantsBuffer<Fsr3Upscaler.UpscalerConstants> _upscalerConstants = new ConstantsBuffer<Fsr3Upscaler.UpscalerConstants>(); |
|
|
|
|
|
private readonly ConstantsBuffer<Fsr3Upscaler.SpdConstants> _spdConstants = new ConstantsBuffer<Fsr3Upscaler.SpdConstants>(); |
|
|
|
|
|
private readonly ConstantsBuffer<Fsr3Upscaler.RcasConstants> _rcasConstants = new ConstantsBuffer<Fsr3Upscaler.RcasConstants>(); |
|
|
|
|
|
private readonly ConstantsBuffer<Fsr3Upscaler.GenerateReactiveConstants> _generateReactiveConstants = new ConstantsBuffer<Fsr3Upscaler.GenerateReactiveConstants>(); |
|
|
|
|
|
private readonly ConstantsBuffer<Fsr3Upscaler.GenerateReactiveConstants2> _tcrAutogenerateConstants = new ConstantsBuffer<Fsr3Upscaler.GenerateReactiveConstants2>(); |
|
|
|
|
|
|
|
|
private bool _firstExecution; |
|
|
private bool _firstExecution; |
|
|
private int _resourceFrameIndex; |
|
|
private int _resourceFrameIndex; |
|
|
@ -85,17 +71,17 @@ namespace FidelityFX.FSR3 |
|
|
_contextDescription = contextDescription; |
|
|
_contextDescription = contextDescription; |
|
|
_commandBuffer = new CommandBuffer { name = "FSR3 Upscaler" }; |
|
|
_commandBuffer = new CommandBuffer { name = "FSR3 Upscaler" }; |
|
|
|
|
|
|
|
|
_upscalerConstantsBuffer = CreateConstantBuffer<Fsr3Upscaler.UpscalerConstants>(); |
|
|
|
|
|
_spdConstantsBuffer = CreateConstantBuffer<Fsr3Upscaler.SpdConstants>(); |
|
|
|
|
|
_rcasConstantsBuffer = CreateConstantBuffer<Fsr3Upscaler.RcasConstants>(); |
|
|
|
|
|
_generateReactiveConstantsBuffer = CreateConstantBuffer<Fsr3Upscaler.GenerateReactiveConstants>(); |
|
|
|
|
|
_tcrAutogenerateConstantsBuffer = CreateConstantBuffer<Fsr3Upscaler.GenerateReactiveConstants2>(); |
|
|
|
|
|
|
|
|
_upscalerConstants.Create(); |
|
|
|
|
|
_spdConstants.Create(); |
|
|
|
|
|
_rcasConstants.Create(); |
|
|
|
|
|
_generateReactiveConstants.Create(); |
|
|
|
|
|
_tcrAutogenerateConstants.Create(); |
|
|
|
|
|
|
|
|
// Set defaults
|
|
|
// Set defaults
|
|
|
_firstExecution = true; |
|
|
_firstExecution = true; |
|
|
_resourceFrameIndex = 0; |
|
|
_resourceFrameIndex = 0; |
|
|
|
|
|
|
|
|
UpscalerConsts.maxUpscaleSize = _contextDescription.MaxUpscaleSize; |
|
|
|
|
|
|
|
|
_upscalerConstants.Value.maxUpscaleSize = _contextDescription.MaxUpscaleSize; |
|
|
|
|
|
|
|
|
_resources.Create(_contextDescription); |
|
|
_resources.Create(_contextDescription); |
|
|
CreatePasses(); |
|
|
CreatePasses(); |
|
|
@ -103,18 +89,18 @@ namespace FidelityFX.FSR3 |
|
|
|
|
|
|
|
|
private void CreatePasses() |
|
|
private void CreatePasses() |
|
|
{ |
|
|
{ |
|
|
_prepareInputsPass = new Fsr3UpscalerPrepareInputsPass(_contextDescription, _resources, _upscalerConstantsBuffer); |
|
|
|
|
|
_lumaPyramidPass = new Fsr3UpscalerLumaPyramidPass(_contextDescription, _resources, _upscalerConstantsBuffer, _spdConstantsBuffer); |
|
|
|
|
|
_shadingChangePyramidPass = new Fsr3UpscalerShadingChangePyramidPass(_contextDescription, _resources, _upscalerConstantsBuffer, _spdConstantsBuffer); |
|
|
|
|
|
_shadingChangePass = new Fsr3UpscalerShadingChangePass(_contextDescription, _resources, _upscalerConstantsBuffer); |
|
|
|
|
|
_prepareReactivityPass = new Fsr3UpscalerPrepareReactivityPass(_contextDescription, _resources, _upscalerConstantsBuffer); |
|
|
|
|
|
_lumaInstabilityPass = new Fsr3UpscalerLumaInstabilityPass(_contextDescription, _resources, _upscalerConstantsBuffer); |
|
|
|
|
|
_accumulatePass = new Fsr3UpscalerAccumulatePass(_contextDescription, _resources, _upscalerConstantsBuffer); |
|
|
|
|
|
_sharpenPass = new Fsr3UpscalerSharpenPass(_contextDescription, _resources, _upscalerConstantsBuffer, _rcasConstantsBuffer); |
|
|
|
|
|
_generateReactivePass = new Fsr3UpscalerGenerateReactivePass(_contextDescription, _resources, _generateReactiveConstantsBuffer); |
|
|
|
|
|
_tcrAutogeneratePass = new Fsr3UpscalerTcrAutogeneratePass(_contextDescription, _resources, _upscalerConstantsBuffer, _tcrAutogenerateConstantsBuffer); |
|
|
|
|
|
|
|
|
_prepareInputsPass = new Fsr3UpscalerPrepareInputsPass(_contextDescription, _resources, _upscalerConstants); |
|
|
|
|
|
_lumaPyramidPass = new Fsr3UpscalerLumaPyramidPass(_contextDescription, _resources, _upscalerConstants, _spdConstants); |
|
|
|
|
|
_shadingChangePyramidPass = new Fsr3UpscalerShadingChangePyramidPass(_contextDescription, _resources, _upscalerConstants, _spdConstants); |
|
|
|
|
|
_shadingChangePass = new Fsr3UpscalerShadingChangePass(_contextDescription, _resources, _upscalerConstants); |
|
|
|
|
|
_prepareReactivityPass = new Fsr3UpscalerPrepareReactivityPass(_contextDescription, _resources, _upscalerConstants); |
|
|
|
|
|
_lumaInstabilityPass = new Fsr3UpscalerLumaInstabilityPass(_contextDescription, _resources, _upscalerConstants); |
|
|
|
|
|
_accumulatePass = new Fsr3UpscalerAccumulatePass(_contextDescription, _resources, _upscalerConstants); |
|
|
|
|
|
_sharpenPass = new Fsr3UpscalerSharpenPass(_contextDescription, _resources, _upscalerConstants, _rcasConstants); |
|
|
|
|
|
_generateReactivePass = new Fsr3UpscalerGenerateReactivePass(_contextDescription, _resources, _upscalerConstants); |
|
|
|
|
|
_tcrAutogeneratePass = new Fsr3UpscalerTcrAutogeneratePass(_contextDescription, _resources, _upscalerConstants, _tcrAutogenerateConstants); |
|
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
|
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
|
|
_debugViewPass = new Fsr3UpscalerDebugViewPass(_contextDescription, _resources, _upscalerConstantsBuffer); |
|
|
|
|
|
|
|
|
_debugViewPass = new Fsr3UpscalerDebugViewPass(_contextDescription, _resources, _upscalerConstants); |
|
|
#endif
|
|
|
#endif
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -136,11 +122,11 @@ namespace FidelityFX.FSR3 |
|
|
|
|
|
|
|
|
_resources.Destroy(); |
|
|
_resources.Destroy(); |
|
|
|
|
|
|
|
|
DestroyConstantBuffer(ref _tcrAutogenerateConstantsBuffer); |
|
|
|
|
|
DestroyConstantBuffer(ref _generateReactiveConstantsBuffer); |
|
|
|
|
|
DestroyConstantBuffer(ref _rcasConstantsBuffer); |
|
|
|
|
|
DestroyConstantBuffer(ref _spdConstantsBuffer); |
|
|
|
|
|
DestroyConstantBuffer(ref _upscalerConstantsBuffer); |
|
|
|
|
|
|
|
|
_tcrAutogenerateConstants.Destroy(); |
|
|
|
|
|
_generateReactiveConstants.Destroy(); |
|
|
|
|
|
_rcasConstants.Destroy(); |
|
|
|
|
|
_spdConstants.Destroy(); |
|
|
|
|
|
_upscalerConstants.Destroy(); |
|
|
|
|
|
|
|
|
if (_commandBuffer != null) |
|
|
if (_commandBuffer != null) |
|
|
{ |
|
|
{ |
|
|
@ -214,12 +200,14 @@ namespace FidelityFX.FSR3 |
|
|
|
|
|
|
|
|
// Reactive mask bias
|
|
|
// Reactive mask bias
|
|
|
const int threadGroupWorkRegionDim = 8; |
|
|
const int threadGroupWorkRegionDim = 8; |
|
|
int dispatchSrcX = (UpscalerConsts.renderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchSrcY = (UpscalerConsts.renderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchDstX = (UpscalerConsts.upscaleSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchDstY = (UpscalerConsts.upscaleSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchShadingChangePassX = ((UpscalerConsts.renderSize.x / 2) + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchShadingChangePassY = ((UpscalerConsts.renderSize.y / 2) + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
|
|
|
var renderSize = _upscalerConstants.Value.renderSize; |
|
|
|
|
|
var upscaleSize = _upscalerConstants.Value.upscaleSize; |
|
|
|
|
|
int dispatchSrcX = (renderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchSrcY = (renderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchDstX = (upscaleSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchDstY = (upscaleSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchShadingChangePassX = ((renderSize.x / 2) + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
int dispatchShadingChangePassY = ((renderSize.y / 2) + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
|
|
|
// Clear reconstructed depth for max depth store
|
|
|
// Clear reconstructed depth for max depth store
|
|
|
if (resetAccumulation) |
|
|
if (resetAccumulation) |
|
|
@ -248,8 +236,8 @@ namespace FidelityFX.FSR3 |
|
|
SetupSpdConstants(dispatchParams, out var dispatchThreadGroupCount); |
|
|
SetupSpdConstants(dispatchParams, out var dispatchThreadGroupCount); |
|
|
|
|
|
|
|
|
// Initialize constant buffers data
|
|
|
// Initialize constant buffers data
|
|
|
commandBuffer.SetBufferData(_upscalerConstantsBuffer, _upscalerConstantsArray); |
|
|
|
|
|
commandBuffer.SetBufferData(_spdConstantsBuffer, _spdConstantsArray); |
|
|
|
|
|
|
|
|
_upscalerConstants.UpdateBufferData(commandBuffer); |
|
|
|
|
|
_spdConstants.UpdateBufferData(commandBuffer); |
|
|
|
|
|
|
|
|
// Auto reactive
|
|
|
// Auto reactive
|
|
|
if (dispatchParams.EnableAutoReactive) |
|
|
if (dispatchParams.EnableAutoReactive) |
|
|
@ -272,12 +260,12 @@ namespace FidelityFX.FSR3 |
|
|
{ |
|
|
{ |
|
|
// Compute the constants
|
|
|
// Compute the constants
|
|
|
SetupRcasConstants(dispatchParams); |
|
|
SetupRcasConstants(dispatchParams); |
|
|
commandBuffer.SetBufferData(_rcasConstantsBuffer, _rcasConstantsArray); |
|
|
|
|
|
|
|
|
_rcasConstants.UpdateBufferData(commandBuffer); |
|
|
|
|
|
|
|
|
// Dispatch RCAS
|
|
|
// Dispatch RCAS
|
|
|
const int threadGroupWorkRegionDimRcas = 16; |
|
|
const int threadGroupWorkRegionDimRcas = 16; |
|
|
int threadGroupsX = (UpscalerConsts.upscaleSize.x + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; |
|
|
|
|
|
int threadGroupsY = (UpscalerConsts.upscaleSize.y + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; |
|
|
|
|
|
|
|
|
int threadGroupsX = (upscaleSize.x + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; |
|
|
|
|
|
int threadGroupsY = (upscaleSize.y + threadGroupWorkRegionDimRcas - 1) / threadGroupWorkRegionDimRcas; |
|
|
_sharpenPass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, threadGroupsX, threadGroupsY); |
|
|
_sharpenPass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, threadGroupsX, threadGroupsY); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -308,11 +296,12 @@ namespace FidelityFX.FSR3 |
|
|
int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
int dispatchSrcY = (dispatchParams.RenderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
int dispatchSrcY = (dispatchParams.RenderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
|
|
|
GenReactiveConsts.scale = dispatchParams.Scale; |
|
|
|
|
|
GenReactiveConsts.threshold = dispatchParams.CutoffThreshold; |
|
|
|
|
|
GenReactiveConsts.binaryValue = dispatchParams.BinaryValue; |
|
|
|
|
|
GenReactiveConsts.flags = (uint)dispatchParams.Flags; |
|
|
|
|
|
commandBuffer.SetBufferData(_generateReactiveConstantsBuffer, _generateReactiveConstantsArray); |
|
|
|
|
|
|
|
|
ref var genReactiveConsts = ref _generateReactiveConstants.Value; |
|
|
|
|
|
genReactiveConsts.scale = dispatchParams.Scale; |
|
|
|
|
|
genReactiveConsts.threshold = dispatchParams.CutoffThreshold; |
|
|
|
|
|
genReactiveConsts.binaryValue = dispatchParams.BinaryValue; |
|
|
|
|
|
genReactiveConsts.flags = (uint)dispatchParams.Flags; |
|
|
|
|
|
_generateReactiveConstants.UpdateBufferData(commandBuffer); |
|
|
|
|
|
|
|
|
((Fsr3UpscalerGenerateReactivePass)_generateReactivePass).ScheduleDispatch(commandBuffer, dispatchParams, dispatchSrcX, dispatchSrcY); |
|
|
((Fsr3UpscalerGenerateReactivePass)_generateReactivePass).ScheduleDispatch(commandBuffer, dispatchParams, dispatchSrcX, dispatchSrcY); |
|
|
} |
|
|
} |
|
|
@ -323,18 +312,19 @@ namespace FidelityFX.FSR3 |
|
|
int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
int dispatchSrcX = (dispatchParams.RenderSize.x + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
int dispatchSrcY = (dispatchParams.RenderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
int dispatchSrcY = (dispatchParams.RenderSize.y + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; |
|
|
|
|
|
|
|
|
TcrAutoGenConsts.autoTcThreshold = dispatchParams.AutoTcThreshold; |
|
|
|
|
|
TcrAutoGenConsts.autoTcScale = dispatchParams.AutoTcScale; |
|
|
|
|
|
TcrAutoGenConsts.autoReactiveScale = dispatchParams.AutoReactiveScale; |
|
|
|
|
|
TcrAutoGenConsts.autoReactiveMax = dispatchParams.AutoReactiveMax; |
|
|
|
|
|
commandBuffer.SetBufferData(_tcrAutogenerateConstantsBuffer, _tcrAutogenerateConstantsArray); |
|
|
|
|
|
|
|
|
ref var tcrAutoGenConsts = ref _tcrAutogenerateConstants.Value; |
|
|
|
|
|
tcrAutoGenConsts.autoTcThreshold = dispatchParams.AutoTcThreshold; |
|
|
|
|
|
tcrAutoGenConsts.autoTcScale = dispatchParams.AutoTcScale; |
|
|
|
|
|
tcrAutoGenConsts.autoReactiveScale = dispatchParams.AutoReactiveScale; |
|
|
|
|
|
tcrAutoGenConsts.autoReactiveMax = dispatchParams.AutoReactiveMax; |
|
|
|
|
|
_tcrAutogenerateConstants.UpdateBufferData(commandBuffer); |
|
|
|
|
|
|
|
|
_tcrAutogeneratePass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, dispatchSrcX, dispatchSrcY); |
|
|
_tcrAutogeneratePass.ScheduleDispatch(commandBuffer, dispatchParams, frameIndex, dispatchSrcX, dispatchSrcY); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void SetupConstants(Fsr3Upscaler.DispatchDescription dispatchParams, bool resetAccumulation) |
|
|
private void SetupConstants(Fsr3Upscaler.DispatchDescription dispatchParams, bool resetAccumulation) |
|
|
{ |
|
|
{ |
|
|
ref Fsr3Upscaler.UpscalerConstants constants = ref UpscalerConsts; |
|
|
|
|
|
|
|
|
ref Fsr3Upscaler.UpscalerConstants constants = ref _upscalerConstants.Value; |
|
|
|
|
|
|
|
|
constants.previousFrameJitterOffset = constants.jitterOffset; |
|
|
constants.previousFrameJitterOffset = constants.jitterOffset; |
|
|
constants.jitterOffset = dispatchParams.JitterOffset; |
|
|
constants.jitterOffset = dispatchParams.JitterOffset; |
|
|
@ -445,7 +435,7 @@ namespace FidelityFX.FSR3 |
|
|
private void SetupRcasConstants(Fsr3Upscaler.DispatchDescription dispatchParams) |
|
|
private void SetupRcasConstants(Fsr3Upscaler.DispatchDescription dispatchParams) |
|
|
{ |
|
|
{ |
|
|
int sharpnessIndex = Mathf.RoundToInt(Mathf.Clamp01(dispatchParams.Sharpness) * (RcasConfigs.Length - 1)); |
|
|
int sharpnessIndex = Mathf.RoundToInt(Mathf.Clamp01(dispatchParams.Sharpness) * (RcasConfigs.Length - 1)); |
|
|
RcasConsts = RcasConfigs[sharpnessIndex]; |
|
|
|
|
|
|
|
|
_rcasConstants.Value = RcasConfigs[sharpnessIndex]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void SetupSpdConstants(Fsr3Upscaler.DispatchDescription dispatchParams, out Vector2Int dispatchThreadGroupCount) |
|
|
private void SetupSpdConstants(Fsr3Upscaler.DispatchDescription dispatchParams, out Vector2Int dispatchThreadGroupCount) |
|
|
@ -454,7 +444,7 @@ namespace FidelityFX.FSR3 |
|
|
SpdSetup(rectInfo, out dispatchThreadGroupCount, out var workGroupOffset, out var numWorkGroupsAndMips); |
|
|
SpdSetup(rectInfo, out dispatchThreadGroupCount, out var workGroupOffset, out var numWorkGroupsAndMips); |
|
|
|
|
|
|
|
|
// Downsample
|
|
|
// Downsample
|
|
|
ref Fsr3Upscaler.SpdConstants spdConstants = ref SpdConsts; |
|
|
|
|
|
|
|
|
ref Fsr3Upscaler.SpdConstants spdConstants = ref _spdConstants.Value; |
|
|
spdConstants.numWorkGroups = (uint)numWorkGroupsAndMips.x; |
|
|
spdConstants.numWorkGroups = (uint)numWorkGroupsAndMips.x; |
|
|
spdConstants.mips = (uint)numWorkGroupsAndMips.y; |
|
|
spdConstants.mips = (uint)numWorkGroupsAndMips.y; |
|
|
spdConstants.workGroupOffsetX = (uint)workGroupOffset.x; |
|
|
spdConstants.workGroupOffsetX = (uint)workGroupOffset.x; |
|
|
|