On 13/10/2018 14:09, Jason Ekstrand wrote:
---
src/intel/vulkan/anv_cmd_buffer.c | 29 +++++++
src/intel/vulkan/anv_device.c | 24 ++++++
src/intel/vulkan/anv_extensions.py | 2 +-
src/intel/vulkan/anv_pipeline.c | 10 ++-
src/intel/vulkan/anv_private.h | 13 +++
src/intel/vulkan/genX_cmd_buffer.c | 125 +++++++++++++++++++++++++++++
src/intel/vulkan/genX_pipeline.c | 122 ++++++++++++++++++++++++++++
7 files changed, 323 insertions(+), 2 deletions(-)
...
+
+ int max_decls = 0;
+ for (unsigned s = 0; s < MAX_XFB_STREAMS; s++)
+ max_decls = MAX2(max_decls, decls[s]);
+
+ uint8_t sbs[MAX_XFB_STREAMS] = { };
+ for (unsigned b = 0; b < MAX_XFB_BUFFERS; b++) {
+ if (xfb_info->buffers_written & (1 << b))
+ sbs[xfb_info->buffer_to_stream[b]] |= 1 << b;
+ }
+
+ uint32_t *dw = anv_batch_emitn(&pipeline->batch, 3 + 2 * max_decls,
+ GENX(3DSTATE_SO_DECL_LIST),
+ .StreamtoBufferSelects0 = sbs[0],
+ .StreamtoBufferSelects1 = sbs[1],
+ .StreamtoBufferSelects2 = sbs[2],
+ .StreamtoBufferSelects3 = sbs[3],
+ .NumEntries0 = decls[0],
+ .NumEntries1 = decls[1],
+ .NumEntries2 = decls[2],
+ .NumEntries3 = decls[3]);
+
+ for (int i = 0; i < max_decls; i++) {
+ GENX(SO_DECL_ENTRY_pack)(NULL, dw + 3 + i * 2,
+ &(struct GENX(SO_DECL_ENTRY)) {
+ .Stream0Decl = so_decl[0][i],
+ .Stream1Decl = so_decl[1][i],
+ .Stream2Decl = so_decl[2][i],
+ .Stream3Decl = so_decl[3][i],
+ });
+ }
Documentation of 3DSTATE_SO_DECL_LIST Gen10+ says :
"
This command must be followed by a PIPE_CONTROL with CS Stall bit set.,
"
}
+#endif /* GEN_GEN >= 8 */
}
static uint32_t
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev