* - VS
* - GS
*/
- pipeline->urb.vs_start = push_constant_chunks;
- pipeline->urb.vs_size = vs_size;
- pipeline->urb.nr_vs_entries = nr_vs_entries;
+ pipeline->urb.start[MESA_SHADER_VERTEX] = push_constant_chunks;
+ pipeline->urb.size[MESA_SHADER_VERTEX] = vs_size;
+ pipeline->urb.entries[MESA_SHADER_VERTEX] = nr_vs_entries;
- pipeline->urb.gs_start = push_constant_chunks + vs_chunks;
- pipeline->urb.gs_size = gs_size;
- pipeline->urb.nr_gs_entries = nr_gs_entries;
+ pipeline->urb.start[MESA_SHADER_GEOMETRY] = push_constant_chunks + vs_chunks;
+ pipeline->urb.size[MESA_SHADER_GEOMETRY] = gs_size;
+ pipeline->urb.entries[MESA_SHADER_GEOMETRY] = nr_gs_entries;
+
+ pipeline->urb.start[MESA_SHADER_TESS_CTRL] = push_constant_chunks;
+ pipeline->urb.size[MESA_SHADER_TESS_CTRL] = 1;
+ pipeline->urb.entries[MESA_SHADER_TESS_CTRL] = 0;
+
+ 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;
}
static void
uint32_t scratch_start[MESA_SHADER_STAGES];
uint32_t total_scratch;
struct {
- uint32_t vs_start;
- uint32_t vs_size;
- uint32_t nr_vs_entries;
- uint32_t gs_start;
- uint32_t gs_size;
- uint32_t nr_gs_entries;
+ uint32_t start[MESA_SHADER_GEOMETRY + 1];
+ uint32_t size[MESA_SHADER_GEOMETRY + 1];
+ uint32_t entries[MESA_SHADER_GEOMETRY + 1];
} urb;
VkShaderStageFlags active_stages;
.ConstantBufferOffset = 8,
.ConstantBufferSize = 4);
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_VS),
- .VSURBStartingAddress = pipeline->urb.vs_start,
- .VSURBEntryAllocationSize = pipeline->urb.vs_size - 1,
- .VSNumberofURBEntries = pipeline->urb.nr_vs_entries);
-
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_GS),
- .GSURBStartingAddress = pipeline->urb.gs_start,
- .GSURBEntryAllocationSize = pipeline->urb.gs_size - 1,
- .GSNumberofURBEntries = pipeline->urb.nr_gs_entries);
-
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_HS),
- .HSURBStartingAddress = pipeline->urb.vs_start,
- .HSURBEntryAllocationSize = 0,
- .HSNumberofURBEntries = 0);
-
- anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_DS),
- .DSURBStartingAddress = pipeline->urb.vs_start,
- .DSURBEntryAllocationSize = 0,
- .DSNumberofURBEntries = 0);
+ for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
+ anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_VS),
+ ._3DCommandSubOpcode = 48 + i,
+ .VSURBStartingAddress = pipeline->urb.start[i],
+ .VSURBEntryAllocationSize = pipeline->urb.size[i] - 1,
+ .VSNumberofURBEntries = pipeline->urb.entries[i]);
+ }
}
static inline uint32_t