Search Issue Tracker

By Design

Votes

0

Found in

2017.3.0b5

Issue ID

961977

Regression

Yes

[Metal] Compute shader buffer returns zeros on iOS device using camera render texture

Graphics - General

-

To reproduce:
1. Download project attached by QA
2. Build it for iOS
3. Run it on a device
4. In the console notice, that compute buffer returned zeros

Expected result: Compute shader buffer should return correct values when using camera render texture

API: Metal
Reproduced with: 2017.3.0b1, 2017.3.0b6, 2018.1.0a1
Not reproducible with: 5.6.4p1, 2017.3.0a7
Regression since: 2017.3.0b1

Comments (1)

  1. Cyril-Mishakin

    Nov 02, 2017 12:22

    For some reason "BuiltinRenderTextureType.CameraTarget" cant be passed into ComputeShader by "CommandBuffer.SetComputeTextureParam".
    Were able to find simple temporary solution for this:

    Not working example:
    cmdBuffer.SetComputeTextureParam (computeShader, 0, "_texture", BuiltinRenderTextureType.CameraTarget);
    cmdBuffer.DispatchCompute (computeShader, 0, 1, 1, 1);

    Working example:
    int tempTextureId = Shader.PropertyToID("_Temp");
    cmdBuffer.GetTemporaryRT(tempTextureId, -1, -1, 24, FilterMode.Point);
    cmdBuffer.Blit (BuiltinRenderTextureType.CameraTarget, tempTextureId);
    cmdBuffer.SetComputeTextureParam (computeShader, 0, "_texture", tempTextureId);
    cmdBuffer.DispatchCompute (computeShader, 0, 1, 1, 1);
    cmdBuffer.ReleaseTemporaryRT (tempTextureId);

    So BuiltinRenderTextureType.CameraTarget can't be passed into ComputeShader but manually created RT can and CameraTarget can be easily copied into our manually created temporary RT.

Add comment

Log in to post comment