<html>
<head>
<base href="https://bugs.freedesktop.org/" />
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_NEW "
title="NEW - Distorted output in obs-studio where other vendors "work""
href="https://bugs.freedesktop.org/show_bug.cgi?id=79783#c9">Comment # 9</a>
on <a class="bz_bug_link
bz_status_NEW "
title="NEW - Distorted output in obs-studio where other vendors "work""
href="https://bugs.freedesktop.org/show_bug.cgi?id=79783">bug 79783</a>
from <span class="vcard"><a class="email" href="mailto:gregory.hainaut@gmail.com" title="gregory.hainaut@gmail.com">gregory.hainaut@gmail.com</a>
</span></b>
<pre>(In reply to Ilia Mirkin from <a href="show_bug.cgi?id=79783#c8">comment #8</a>)
<span class="quote">> (In reply to gregory.hainaut from <a href="show_bug.cgi?id=79783#c5">comment #5</a>)
> > Here the dump of the ASM (TGSI?). (Generated with the hack to disable flat
> > optimization)
>
> TGSI (which is DX9-ish assembly type code, but extended well beyond)
>
> >
> > FRAG
> > DCL IN[0], GENERIC[0], PERSPECTIVE
> > DCL OUT[0], COLOR
> > DCL SAMP[0]
> > DCL SVIEW[0], 2D, FLOAT
> > DCL CONST[1][0]
> > DCL TEMP[0..1], LOCAL
> > IMM[0] FLT32 { 2.0000, 0.0000, 0.0000, 0.0000}
> > 0: MOV TEMP[0].xy, IN[0].xyyy
> > 1: TEX TEMP[0], TEMP[0], SAMP[0], 2D
> > 2: MOV TEMP[1].xyz, TEMP[0].xyzx
> > 3: MUL TEMP[0].x, TEMP[0].wwww, IMM[0].xxxx
> > 4: MOV TEMP[1].w, TEMP[0].xxxx
> > 5: MOV OUT[0], TEMP[1]
> > 6: END
> >
> > As you can it use the IN[0] whereas I have 2 inputs in the FS. IN[0] is
> > likely my position which is [-1;1]. It confirms the strange behavior of my
> > previous message.
> > My shader doesn't use the parameter p so I guess it was wrongly removed.
>
> You should double-check that it wasn't also eliminated from the relevant
> vertex shader. GENERIC[0] should map to whatever GENERIC[0] output in the
> vertex shader.</span >
VERT
DCL IN[0]
DCL IN[1]
DCL OUT[0], POSITION
DCL OUT[1], GENERIC[0]
DCL OUT[2], GENERIC[1]
DCL TEMP[0..2], LOCAL
IMM[0] FLT32 { 0.5000, 1.0000, 0.0000, 0.0000}
0: MOV TEMP[0].zw, IMM[0].yyxy
1: MOV TEMP[0].xy, IN[0].xyxx
2: MOV TEMP[1].zw, IMM[0].yyxy
3: MOV TEMP[1].xy, IN[0].xyxx
4: MOV TEMP[2].xy, IN[1].xyxx
5: MOV OUT[1], TEMP[0]
6: MOV OUT[2], TEMP[2]
7: MOV OUT[0], TEMP[1]
8: END
The vertex shader outputs 2 variables. POSITION is copyied into GENERIC[0]
whereas the texture coordinate is copyied into GENERIC[1]. In separate shader
program, Frag shader must work for any Vert shader (or it could be a Geom
shader).
<span class="quote">> By the way, you may also be interested in MESA_GLSL=dump which dumps out the
> mesa glsl ir in various stages.</span >
Note I renamed the interface name to p_deadcode to ease grep.
Before the above patch:
(declare (location=24 shader_in ) vec4 packed:t)
(declare (location=0 uniform ) ivec4 ScalingFactor)
(declare (location=4 shader_out ) vec4 SV_Target0)
(declare (temporary ) vec4 SV_Target0)
(declare (location=0 uniform ) sampler2D TextureSampler)
If I enable the logging of opt_dead_code.cpp
p_deadcode@0x93dbca8: 0 refs, 0 assigns, declared in our scope
Removed declaration of p_deadcode@0x93dbca8
After the above patch:
(declare (location=0 shader_in ) vec4 gl_FragCoord)
(declare (location=17 shader_in ) (array vec4 1) gl_ClipDistanceMESA)
(declare (location=19 shader_in flat) int gl_PrimitiveID)
(declare (location=22 shader_in ) bool gl_FrontFacing)
(declare (location=23 shader_in ) vec2 gl_PointCoord)
(declare (location=24 shader_in ) vec4 p_deadcode) <= the missing one
(declare (location=25 shader_in ) vec4 packed:t)
(declare (location=0 uniform ) ivec4 ScalingFactor)
(declare (location=4 shader_out ) vec4 SV_Target0)
(declare (temporary ) vec4 SV_Target0)
(declare (location=0 uniform ) sampler2D TextureSampler)
Hum, it might be a better idea to the interface block type to only disable the
optimization in this case. I tried to use is_interface_instance but I guess it
is only working for uniform.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>