gen8/compute: Setup push constants and local ids

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Jordan Justen 2015-12-08 17:00:39 -08:00
parent f8d5fb4293
commit 47e5fb52f4
1 changed files with 20 additions and 0 deletions

View File

@ -47,6 +47,9 @@ cmd_buffer_flush_push_constants(struct anv_cmd_buffer *cmd_buffer)
VkShaderStageFlags flushed = 0;
anv_foreach_stage(stage, cmd_buffer->state.push_constants_dirty) {
if (stage == MESA_SHADER_COMPUTE)
continue;
struct anv_state state = anv_cmd_buffer_push_constants(cmd_buffer, stage);
if (state.offset == 0)
@ -511,6 +514,21 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
if (result != VK_SUCCESS)
return result;
struct anv_state push_state = anv_cmd_buffer_cs_push_constants(cmd_buffer);
const struct brw_cs_prog_data *cs_prog_data = &pipeline->cs_prog_data;
const struct brw_stage_prog_data *prog_data = &cs_prog_data->base;
unsigned local_id_dwords = cs_prog_data->local_invocation_id_regs * 8;
unsigned push_constant_data_size =
(prog_data->nr_params + local_id_dwords) * sizeof(gl_constant_value);
unsigned reg_aligned_constant_size = ALIGN(push_constant_data_size, 32);
unsigned push_constant_regs = reg_aligned_constant_size / 32;
anv_batch_emit(&cmd_buffer->batch, GENX(MEDIA_CURBE_LOAD),
.CURBETotalDataLength = push_state.alloc_size,
.CURBEDataStartAddress = push_state.offset);
struct anv_state state =
anv_state_pool_emit(&device->dynamic_state_pool,
GENX(INTERFACE_DESCRIPTOR_DATA), 64,
@ -520,6 +538,8 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
.BindingTableEntryCount = 0,
.SamplerStatePointer = samplers.offset,
.SamplerCount = 0,
.ConstantIndirectURBEntryReadLength = push_constant_regs,
.ConstantURBEntryReadOffset = 0,
.NumberofThreadsinGPGPUThreadGroup = 0);
uint32_t size = GENX(INTERFACE_DESCRIPTOR_DATA_length) * sizeof(uint32_t);