mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 17:30:20 +01:00
anv: Fill holes in the VF VUE to zero
This fixes a GPU hang in DOOM 2016 running under wine. Cc: mesa-stable@lists.freedesktop.org Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104809 Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
b2313ef4a8
commit
76b0e4d8c9
1 changed files with 28 additions and 1 deletions
|
|
@ -115,7 +115,34 @@ emit_vertex_input(struct anv_pipeline *pipeline,
|
|||
GENX(3DSTATE_VERTEX_ELEMENTS));
|
||||
if (!p)
|
||||
return;
|
||||
memset(p + 1, 0, (num_dwords - 1) * 4);
|
||||
|
||||
for (uint32_t i = 0; i < total_elems; i++) {
|
||||
/* The SKL docs for VERTEX_ELEMENT_STATE say:
|
||||
*
|
||||
* "All elements must be valid from Element[0] to the last valid
|
||||
* element. (I.e. if Element[2] is valid then Element[1] and
|
||||
* Element[0] must also be valid)."
|
||||
*
|
||||
* The SKL docs for 3D_Vertex_Component_Control say:
|
||||
*
|
||||
* "Don't store this component. (Not valid for Component 0, but can
|
||||
* be used for Component 1-3)."
|
||||
*
|
||||
* So we can't just leave a vertex element blank and hope for the best.
|
||||
* We have to tell the VF hardware to put something in it; so we just
|
||||
* store a bunch of zero.
|
||||
*
|
||||
* TODO: Compact vertex elements so we never end up with holes.
|
||||
*/
|
||||
struct GENX(VERTEX_ELEMENT_STATE) element = {
|
||||
.Valid = true,
|
||||
.Component0Control = VFCOMP_STORE_0,
|
||||
.Component1Control = VFCOMP_STORE_0,
|
||||
.Component2Control = VFCOMP_STORE_0,
|
||||
.Component3Control = VFCOMP_STORE_0,
|
||||
};
|
||||
GENX(VERTEX_ELEMENT_STATE_pack)(NULL, &p[1 + i * 2], &element);
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < info->vertexAttributeDescriptionCount; i++) {
|
||||
const VkVertexInputAttributeDescription *desc =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue