pipeline->urb.start[MESA_SHADER_TESS_EVAL] = push_constant_chunks;
pipeline->urb.size[MESA_SHADER_TESS_EVAL] = 1;
pipeline->urb.entries[MESA_SHADER_TESS_EVAL] = 0;
+
+ pipeline->urb.push_size[MESA_SHADER_VERTEX] = 4;
+ pipeline->urb.push_size[MESA_SHADER_TESS_CTRL] = 0;
+ pipeline->urb.push_size[MESA_SHADER_TESS_EVAL] = 0;
+ pipeline->urb.push_size[MESA_SHADER_GEOMETRY] = 4;
+ pipeline->urb.push_size[MESA_SHADER_FRAGMENT] = 4;
}
static void
uint32_t scratch_start[MESA_SHADER_STAGES];
uint32_t total_scratch;
struct {
+ uint8_t push_size[MESA_SHADER_FRAGMENT + 1];
uint32_t start[MESA_SHADER_GEOMETRY + 1];
uint32_t size[MESA_SHADER_GEOMETRY + 1];
uint32_t entries[MESA_SHADER_GEOMETRY + 1];
.Address = { &device->workaround_bo, 0 });
#endif
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_VS),
- .ConstantBufferOffset = 0,
- .ConstantBufferSize = 4);
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_GS),
- .ConstantBufferOffset = 4,
- .ConstantBufferSize = 4);
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_PS),
- .ConstantBufferOffset = 8,
- .ConstantBufferSize = 4);
+ unsigned push_start = 0;
+ for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) {
+ anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_VS),
+ ._3DCommandSubOpcode = 18 + i,
+ .ConstantBufferOffset = push_start,
+ .ConstantBufferSize = pipeline->urb.push_size[i]);
+ push_start += pipeline->urb.push_size[i];
+ }
for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_VS),