Re: Mesa: llvmpipe: issues with using packDouble2x32

"Matwey V. Kornilov" <[email protected]>
Newsgroups gmane.comp.video.mesa3d.user
Message-ID <CAJs94EaAhrr5oufddxGPp2tkCXDU=K4F-dEayx46HsSYk=wo7A@mail.gmail.com>
Hi Brain,

Can DADD correctly interpret things like .yx (in TEMP[1].yxyx)? It has
to swap fours of bytes before.

2018-08-07 21:08 GMT+03:00 Matwey V. Kornilov <[email protected]>:
> Hi Brain,
>
> Thank you for useful advice. I've found the following.
>
> The shader when black screen is the following:
>
> llvmpipe: Create fragment shader #261 0x275fd10:
> FRAG
> PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1
> DCL IN[0], GENERIC[0], CONSTANT
> DCL OUT[0], COLOR
>   0: MOV OUT[0], IN[0]
>   1: END
> usage masks:
>   IN[0].xyzw
>
> FRAG
> DCL IN[0].xy, GENERIC[9], PERSPECTIVE
> DCL OUT[0], COLOR
> DCL SAMP[0]
> DCL SAMP[1]
> DCL SVIEW[0], 2D, UINT
> DCL SVIEW[1], 1D, FLOAT
> DCL CONST[0][0..1]
> DCL TEMP[0..2], LOCAL
> IMM[0] FLT64 {0,00000000, 1,00000000}
>   0: F2D TEMP[0].xy, CONST[0][0].xxxx
>   1: MOV TEMP[1].xy, IN[0].xyyy
>   2: TEX TEMP[1].xy, TEMP[1], SAMP[0], 2D
>   3: F2D TEMP[2].xy, CONST[0][1].xxxx
>   4: DNEG TEMP[2].xy, TEMP[2].xyxy
>   5: DADD TEMP[1].xy, TEMP[1].yxyx, TEMP[2].xyxy
>   6: DMUL TEMP[0].xy, TEMP[0].xyxy, TEMP[1].xyxy
>   7: DMAX TEMP[0].xy, TEMP[0].xyxy, IMM[0].xyxy
>   8: DMIN TEMP[0].xy, TEMP[0].xyxy, IMM[0].zwzw
>   9: D2F TEMP[0].x, TEMP[0].xyxy
>  10: MOV TEMP[0].x, TEMP[0].xxxx
>  11: TEX TEMP[0], TEMP[0], SAMP[1], 1D
>  12: MOV OUT[0], TEMP[0]
>  13: END
>
> llvmpipe: Create fragment shader #262 0x2916910:
> FRAG
> DCL IN[0].xy, GENERIC[9], PERSPECTIVE
> DCL OUT[0], COLOR
> DCL SAMP[0]
> DCL SAMP[1]
> DCL SVIEW[0], 2D, UINT
> DCL SVIEW[1], 1D, FLOAT
> DCL CONST[0][0..1]
> DCL TEMP[0..2], LOCAL
> IMM[0] FLT64 {0,00000000, 1,00000000}
>   0: F2D TEMP[0].xy, CONST[0][0].xxxx
>   1: MOV TEMP[1].xy, IN[0].xyyy
>   2: TEX TEMP[1].xy, TEMP[1], SAMP[0], 2D
>   3: F2D TEMP[2].xy, CONST[0][1].xxxx
>   4: DNEG TEMP[2].xy, TEMP[2].xyxy
>   5: DADD TEMP[1].xy, TEMP[1].yxyx, TEMP[2].xyxy
>   6: DMUL TEMP[0].xy, TEMP[0].xyxy, TEMP[1].xyxy
>   7: DMAX TEMP[0].xy, TEMP[0].xyxy, IMM[0].xyxy
>   8: DMIN TEMP[0].xy, TEMP[0].xyxy, IMM[0].zwzw
>   9: D2F TEMP[0].x, TEMP[0].xyxy
>  10: MOV TEMP[0].x, TEMP[0].xxxx
>  11: TEX TEMP[0], TEMP[0], SAMP[1], 1D
>  12: MOV OUT[0], TEMP[0]
>  13: END
> usage masks:
>   IN[0].xy
>
>
> For good shader version:
>
> llvmpipe: Create fragment shader #261 0x236ad50:
> FRAG
> PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1
> DCL IN[0], GENERIC[0], CONSTANT
> DCL OUT[0], COLOR
>   0: MOV OUT[0], IN[0]
>   1: END
> usage masks:
>   IN[0].xyzw
>
> FRAG
> DCL IN[0].xy, GENERIC[9], PERSPECTIVE
> DCL OUT[0], COLOR
> DCL SAMP[0]
> DCL SAMP[1]
> DCL SVIEW[0], 2D, UINT
> DCL SVIEW[1], 1D, FLOAT
> DCL CONST[0][0..1]
> DCL TEMP[0..2], LOCAL
> IMM[0] FLT64 {0,00000000, 1,00000000}
>   0: MOV TEMP[0].xy, IN[0].xyyy
>   1: TEX TEMP[0].y, TEMP[0], SAMP[0], 2D
>   2: MOV TEMP[0].x, TEMP[0].yyyy
>   3: MOV TEMP[1].xy, IN[0].xyyy
>   4: TEX TEMP[1].x, TEMP[1], SAMP[0], 2D
>   5: MOV TEMP[0].y, TEMP[1].xxxx
>   6: F2D TEMP[1].xy, CONST[0][0].xxxx
>   7: F2D TEMP[2].xy, CONST[0][1].xxxx
>   8: DNEG TEMP[2].xy, TEMP[2].xyxy
>   9: DADD TEMP[0].xy, TEMP[0].xyxy, TEMP[2].xyxy
>  10: DMUL TEMP[0].xy, TEMP[1].xyxy, TEMP[0].xyxy
>  11: DMAX TEMP[0].xy, TEMP[0].xyxy, IMM[0].xyxy
>  12: DMIN TEMP[0].xy, TEMP[0].xyxy, IMM[0].zwzw
>  13: D2F TEMP[0].x, TEMP[0].xyxy
>  14: MOV TEMP[0].x, TEMP[0].xxxx
>  15: TEX TEMP[0], TEMP[0], SAMP[1], 1D
>  16: MOV OUT[0], TEMP[0]
>  17: END
>
> llvmpipe: Create fragment shader #262 0x2525fd0:
> FRAG
> DCL IN[0].xy, GENERIC[9], PERSPECTIVE
> DCL OUT[0], COLOR
> DCL SAMP[0]
> DCL SAMP[1]
> DCL SVIEW[0], 2D, UINT
> DCL SVIEW[1], 1D, FLOAT
> DCL CONST[0][0..1]
> DCL TEMP[0..2], LOCAL
> IMM[0] FLT64 {0,00000000, 1,00000000}
>   0: MOV TEMP[0].xy, IN[0].xyyy
>   1: TEX TEMP[0].y, TEMP[0], SAMP[0], 2D
>   2: MOV TEMP[0].x, TEMP[0].yyyy
>   3: MOV TEMP[1].xy, IN[0].xyyy
>   4: TEX TEMP[1].x, TEMP[1], SAMP[0], 2D
>   5: MOV TEMP[0].y, TEMP[1].xxxx
>   6: F2D TEMP[1].xy, CONST[0][0].xxxx
>   7: F2D TEMP[2].xy, CONST[0][1].xxxx
>   8: DNEG TEMP[2].xy, TEMP[2].xyxy
>   9: DADD TEMP[0].xy, TEMP[0].xyxy, TEMP[2].xyxy
>  10: DMUL TEMP[0].xy, TEMP[1].xyxy, TEMP[0].xyxy
>  11: DMAX TEMP[0].xy, TEMP[0].xyxy, IMM[0].xyxy
>  12: DMIN TEMP[0].xy, TEMP[0].xyxy, IMM[0].zwzw
>  13: D2F TEMP[0].x, TEMP[0].xyxy
>  14: MOV TEMP[0].x, TEMP[0].xxxx
>  15: TEX TEMP[0], TEMP[0], SAMP[1], 1D
>  16: MOV OUT[0], TEMP[0]
>  17: END
> usage masks:
>   IN[0].xy
>
>
>
> 2018-08-07 17:29 GMT+03:00 Brian Paul <[email protected]>:
>> On 08/07/2018 03:16 AM, Matwey V. Kornilov wrote:
>>>
>>> Hi all,
>>>
>>> I am running Mesa-18.0.2 with Intel HD Graphics 620 (Kaby Lake GT2) on
>>> Linux 4.12.14. I am trying to use GLSL packDouble2x32() function from
>>> GL_ARB_gpu_shader_fp64 extension in my application.
>>>
>>> The following fragment shader works as expected:
>>>
>>>    #version 330
>>>    #extension GL_ARB_gpu_shader_fp64 : require
>>>    in vec2 UV;
>>>    out vec4 color;
>>>    uniform usampler2D image_texture;
>>>
>>>    void main() {
>>>        double value = packDouble2x32(texture(image_texture, UV).gr);
>>>        color = vec4(float(value), 0.0, 0.0, 1.0);
>>>    }
>>>
>>> `image_texture` parameters are the following. Texture type is
>>> GL_UNSIGNED_INT, pixel format is GL_RG_INTEGER and texture format is
>>> GL_RG32UI.
>>>
>>> However, when I force usage of llvmpipe with the same Mesa installation:
>>>
>>>    OpenGL vendor string: VMware, Inc.
>>>    OpenGL renderer string: llvmpipe (LLVM 5.0, 256 bits)
>>>
>>> The same shader compiles successfully, but renders empty black screen.
>>> I am not sure that this is how it should to be.
>>>
>>> It is interesting that the following shader modification works fine on
>>> llvmpipe:
>>>
>>>    #version 330
>>>    #extension GL_ARB_gpu_shader_fp64 : require
>>>    in vec2 UV;
>>>    out vec4 color;
>>>    uniform usampler2D image_texture;
>>>
>>>    void main() {
>>>        double value = packDouble2x32(uvec2(texture(image_texture,
>>> UV).g, texture(image_texture, UV).r));
>>>        color = vec4(float(value), 0.0, 0.0, 1.0);
>>>    }
>>>
>>> The question is how could I debug further what is going wrong here?
>>>
>>
>> Maybe try setting ST_DEBUG=tgsi and run both versions and compare the TGSI
>> code printed to your terminal.  Any difference would be a clue.
>>
>> -Brian
>>
>
>
>
> --
> With best regards,
> Matwey V. Kornilov



-- 
With best regards,
Matwey V. Kornilov
_______________________________________________
mesa-users mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.