|
|
|
|
|
|
|
|
|
|
cmd.SetComputeTextureParam(m_DepthPyramidCS, kernel, _Source, src); |
|
|
|
cmd.SetComputeTextureParam(m_DepthPyramidCS, kernel, _Result, dest); |
|
|
|
// The compute shader work in texture space
|
|
|
|
// So we must provide the texture's size
|
|
|
|
srcWorkMip.width, srcWorkMip.height, |
|
|
|
(1.0f / srcMip.width) * scale.x, (1.0f / srcMip.height) * scale.y) |
|
|
|
src.rt.width, src.rt.height, |
|
|
|
(1.0f / src.rt.width), (1.0f / src.rt.height)) |
|
|
|
); |
|
|
|
|
|
|
|
cmd.DispatchCompute( |
|
|
|
|
|
|
1 |
|
|
|
); |
|
|
|
|
|
|
|
var dstMipWidthToCopy = Mathf.Min(targetTexture.rt.width >> (i + 1), dstWorkMip.width); |
|
|
|
var dstMipHeightToCopy = Mathf.Min(targetTexture.rt.height >> (i + 1), dstWorkMip.height); |
|
|
|
var dstMipWidthToCopy = Mathf.Min(Mathf.Min(targetTexture.rt.width >> (i + 1), dstWorkMip.width), mips[i].rt.width); |
|
|
|
var dstMipHeightToCopy = Mathf.Min(Mathf.Min(targetTexture.rt.height >> (i + 1), dstWorkMip.height), mips[i].rt.height); |
|
|
|
|
|
|
|
// If we could bind texture mips as UAV we could avoid this copy...(which moreover copies more than the needed viewport if not fullscreen)
|
|
|
|
cmd.CopyTexture(mips[i], 0, 0, 0, 0, dstMipWidthToCopy, dstMipHeightToCopy, targetTexture, 0, i + 1, 0, 0); |
|
|
|
|
|
|
cmd.SetComputeVectorParam( |
|
|
|
m_ColorPyramidCS, |
|
|
|
_Size, |
|
|
|
new Vector4(dest.width, dest.height, 1f / dest.width, 1f / dest.height) |
|
|
|
new Vector4(src.width >> 1, src.height >> 1, 1f / (src.width >> 1), 1f / (src.height >> 1)) |
|
|
|
); |
|
|
|
cmd.DispatchCompute( |
|
|
|
m_ColorPyramidCS, |
|
|
|
|
|
|
1 |
|
|
|
); |
|
|
|
|
|
|
|
var dstMipWidthToCopy = Mathf.Min(targetTexture.width >> (i + 1), dstWorkMip.width); |
|
|
|
var dstMipHeightToCopy = Mathf.Min(targetTexture.height >> (i + 1), dstWorkMip.height); |
|
|
|
var dstMipWidthToCopy = Mathf.Min(Mathf.Min(targetTexture.width >> (i + 1), dstWorkMip.width), mips[i].width); |
|
|
|
var dstMipHeightToCopy = Mathf.Min(Mathf.Min(targetTexture.height >> (i + 1), dstWorkMip.height), mips[i].height); |
|
|
|
|
|
|
|
// If we could bind texture mips as UAV we could avoid this copy...(which moreover copies more than the needed viewport if not fullscreen)
|
|
|
|
cmd.CopyTexture( |
|
|
|