summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIago Toral Quiroga <itoral@igalia.com>2020-06-29 11:17:19 +0200
committerMarge Bot <eric+marge@anholt.net>2020-10-13 21:21:31 +0000
commitb546155cc340ed24f51c777c03c1431248ae5894 (patch)
treeb6c59c4820a03f5a907845cec0beaa22b56d7277
parentf6e7290cbcd3468466e422390117f8d83445e089 (diff)
v3dv: add workaround for GFXH-1602
The first attribute must be active if using builtins. This fixes a lot of simulator crashes for vertex input CTS tests. It should be noted that some of these tests still fail after this fix though, so there may be some other bug. Fixes crashes in: dEQP-VK.pipeline.vertex_input.multiple_attributes.* Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
-rw-r--r--src/broadcom/vulkan/v3dv_cmd_buffer.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c
index 887212ff928..3eb1bbf5a95 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -3415,7 +3415,16 @@ emit_gl_shader_state(struct v3dv_cmd_buffer *cmd_buffer)
}
/* Upload vertex element attributes (SHADER_STATE_ATTRIBUTE_RECORD) */
+ struct v3d_vs_prog_data *prog_data_vs =
+ pipeline->vs->current_variant->prog_data.vs;
+
+ struct v3d_vs_prog_data *prog_data_vs_bin =
+ pipeline->vs_bin->current_variant->prog_data.vs;
+
bool cs_loaded_any = false;
+ const bool cs_uses_builtins = prog_data_vs_bin->uses_iid ||
+ prog_data_vs_bin->uses_biid ||
+ prog_data_vs_bin->uses_vid;
const uint32_t packet_length =
cl_packet_length(GL_SHADER_STATE_ATTRIBUTE_RECORD);
@@ -3425,12 +3434,6 @@ emit_gl_shader_state(struct v3dv_cmd_buffer *cmd_buffer)
struct v3dv_vertex_binding *c_vb = &cmd_buffer->state.vertex_bindings[binding];
- struct v3d_vs_prog_data *prog_data_vs =
- pipeline->vs->current_variant->prog_data.vs;
-
- struct v3d_vs_prog_data *prog_data_vs_bin =
- pipeline->vs_bin->current_variant->prog_data.vs;
-
cl_emit_with_prepacked(&job->indirect, GL_SHADER_STATE_ATTRIBUTE_RECORD,
&pipeline->vertex_attrs[i * packet_length], attr) {
@@ -3450,12 +3453,18 @@ emit_gl_shader_state(struct v3dv_cmd_buffer *cmd_buffer)
* the CS, then set up a dummy load of the last attribute into the
* CS's VPM inputs. (Since CS is just dead-code-elimination compared
* to VS, we can't have CS loading but not VS).
+ *
+ * GFXH-1602: first attribute must be active if using builtins.
*/
if (prog_data_vs_bin->vattr_sizes[location])
cs_loaded_any = true;
- if (binding == pipeline->va_count - 1 && !cs_loaded_any) {
+ if (i == 0 && cs_uses_builtins && !cs_loaded_any) {
+ attr.number_of_values_read_by_coordinate_shader = 1;
+ cs_loaded_any = true;
+ } else if (i == pipeline->va_count - 1 && !cs_loaded_any) {
attr.number_of_values_read_by_coordinate_shader = 1;
+ cs_loaded_any = true;
}
attr.maximum_index = 0xffffff;