如何避免有关未使用的顶点输入的验证层错误?

时间:2018-09-02 17:37:18

标签: glsl vulkan

我遇到很多错误,例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">
       <NestedScrollView
            android:layout_width="match_parent"
            android:id="@+id/parentscrollview"
            android:layout_height="wrap_content">
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">


            <TextView
                android:id="@+id/textView"
                android:layout_width="match_parent"
                android:layout_marginTop="20dp"
                android:textSize="15sp"
                android:layout_height="wrap_content"
                android:text="txt" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:text="txt2"
                android:textSize="15sp"
                android:layout_below="@+id/textView"
                android:id="@+id/textView2"
                />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:text=""
                android:textSize="15sp"
                android:layout_below="@+id/textView2"
                android:id="@+id/textView4"
                />


            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:layout_below="@+id/textView4"
                android:id="@+id/autocainatiner"
                android:orientation="vertical">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="6dp"
                    android:textSize="15sp"
                    android:layout_marginTop="20dp"
                    android:textAllCaps="true"
                    android:text="Please Add/chose the observed clinical features :"
                    />

                <com.mycardboarddreams.autocompletebubbletext.MultiSelectEditText
                    android:id="@+id/auto_text_complete"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textColor="@android:color/black"
                    android:textStyle="bold"
                    android:padding="5dp"
                    android:background="#FFEEEEEE"/>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">


                <Button
                    android:id="@+id/btnPlanet"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:onClick="blahblah"
                    android:text="Enter" />
                </RelativeLayout>


            </LinearLayout>

            <NestedScrollView
                android:layout_width="match_parent"
                android:id="@+id/scrollframe"
                android:layout_below="@+id/autocainatiner"
                android:fillViewport="true"
                android:layout_height="200dp">
                <FrameLayout
                    android:id="@+id/auto_list_container"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorPrimaryDark"/>
            </NestedScrollView>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/scrollframe"
                android:orientation="vertical"
                >
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="40dp"
                    android:textSize="16sp"
                    android:textAllCaps="true"
                    android:textStyle="bold"
                    android:gravity="center_horizontal"
                    android:text="Suggested Diganosi list (Please Click on suggested diseases for more infos)"
                    android:id="@+id/textView3"
                    />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textSize="15sp"
                    android:text="Suggested Diganosi list (Please Click on suggested diseases for more infos)"
                    android:layout_marginTop="25dp"
                    android:textAllCaps="true"
                    android:id="@+id/diagnosis"
                    />

                <FrameLayout
                    android:id="@+id/auto_list_container2"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:visibility="gone"
                    android:background="@color/colorPrimaryDark"/>

            </LinearLayout>


            </RelativeLayout>
        </NestedScrollView>

    </RelativeLayout>

原因是我有一个着色器,其中根据某些特殊化常量的值使用某些顶点输入,例如:

The Pipeline State Object (0x51) expects that this Command Buffer's vertex binding Index 10 should be set via vkCmdBindVertexBuffers. This is because VkVertexInputBindingDescription struct at index 10 of pVertexBindingDescriptions has a binding value of 10.'

尽管如此,但一切正常,因为我实际上并未使用layout(constant_id = 0) const bool flag = false; layout(location = 0) in vec3 input; void main() { if (flag) { f(input); } else { // ignore input } }

什么是忽略/沉默这些错误的正确方法?将虚拟的空缓冲区绑定到那些绑定上可以吗?

2 个答案:

答案 0 :(得分:2)

所有vkCmdDraw命令的有效用法是:

  

通过在顶点着色器入口点的界面中声明的顶点输入变量访问的所有顶点输入绑定必须绑定有效的缓冲区

这与通过描述符处理的其他资源绑定的规则非常相似:

  

通过vkCmdBindDescriptorSets指定的每个绑定描述符集中的描述符,如果由vkCmdBindPipeline指定的绑定VkPipeline对象静态使用,则它们必须有效。

该规范与 not 一致,要求根据专业化常数执行死代码消除。如果没有DCE,则即使无法执行对f(input)的调用,着色器中仍然存在对它的调用。因此,input变量仍在接口中静态使用/声明,并且上面的有效用法适用。

因此您必须具有缓冲区绑定。但是,它可能很小,因为您实际上从未读取过它,也不必用数据填充它。它可以包含随机的未初始化垃圾(如果验证层对此表示怀疑,则仅应作为警告。 ,不是错误)。

答案 1 :(得分:0)

当前,我的解决方案是创建一个虚拟缓冲区,绑定内存并向其中复制一些数据。这样可以使验证层的错误消失。

必须绑定内存并复制一些数据,否则会收到警告:Cannot read invalid region of memory allocation XXX for bound Buffer object XXX, please fill the memory before using.

我想知道是否有更清洁的解决方案。