Skip to content

[SPIRV] Useless copy of all VtxInput elements #2381

@GregSlazinski

Description

@GregSlazinski

I have this shader:

#define Bool     bool
#define Int      int
#define UInt     uint
#define Flt      float
#define VecI2    int2
#define VecI     int3
#define VecI4    int4
#define VecU2    uint2
#define VecU     uint3
#define VecU4    uint4
#define Vec2     float2
#define Vec      float3
#define Vec4     float4

   #define Half     min16float
   #define VecH2    min16float2
   #define VecH     min16float3
   #define VecH4    min16float4
   #define MatrixH3 min16float3x3
   #define MatrixH  min16float4x3
   #define MatrixH4 min16float4x4

struct VtxInput // Vertex Input, use this class to access vertex data in vertex shaders
{
   Vec4  _pos     :ATTR0 ;
   VecH  _hlp     :ATTR1 ;
   VecH  _nrm     :ATTR2 ;
   VecH4 _tan     :ATTR3 ;
   Vec2  _tex     :ATTR4 ;
   Vec2  _tex1    :ATTR5 ;
   Vec2  _tex2    :ATTR6 ;
   Half  _size    :ATTR7 ;
   Vec4  _bone    :ATTR8 ;
   VecH4 _weight  :ATTR9 ;
   VecH4 _material:ATTR10;
   VecH4 _color   :ATTR11;

   VecH4 color1()
   {
      return VecH4(_color.rgb+1, _color.a);
   }
};
void Draw2DTexCol_VS(VtxInput vtx,
                 out VecH4 outCol:COLOR   ,
                 out Vec4  outVtx:POSITION)
{
   outCol=vtx.color1();
   outVtx=0;
}
void Draw2DTexCol_PS()
{}

After converting to Spir-V to GLSL using https://github.com/KhronosGroup/SPIRV-Cross/
It gives me:

Shader:Draw2DTexCol VS
struct VtxInput
{
vec4 _pos;
mediump vec3 _hlp;
mediump vec3 _nrm;
mediump vec4 _tan;
vec2 _tex;
vec2 _tex1;
vec2 _tex2;
mediump float _size;
vec4 _bone;
mediump vec4 _weight;
mediump vec4 _material;
mediump vec4 _color;
};
layout(location=0)in vec4 ATTR0;
layout(location=1)in mediump vec3 ATTR1;
layout(location=2)in mediump vec3 ATTR2;
layout(location=3)in mediump vec4 ATTR3;
layout(location=4)in vec2 ATTR4;
layout(location=5)in vec2 ATTR5;
layout(location=6)in vec2 ATTR6;
layout(location=7)in mediump float ATTR7;
layout(location=8)in vec4 ATTR8;
layout(location=9)in mediump vec4 ATTR9;
layout(location=10)in mediump vec4 ATTR10;
layout(location=11)in mediump vec4 ATTR11;
out vec4 IO0;
out vec4 IO1;
void main()
{
VtxInput param_var_vtx=VtxInput(ATTR0,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,ATTR6,ATTR7,ATTR8,ATTR9,ATTR10,ATTR11);
IO0=vec4(param_var_vtx._color.xyz+vec3(1.0),param_var_vtx._color.w);
IO1=vec4(0.0);
}

It performs a useless copy of all VtxInput elements:
VtxInput param_var_vtx=VtxInput(ATTR0,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,ATTR6,ATTR7,ATTR8,ATTR9,ATTR10,ATTR11);

Metadata

Metadata

Assignees

Labels

spirvWork related to SPIR-V

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions