intel: track current cmd buffer shader info
Added intel_cmd_shader structs for each of the shader types
so that we know the offsets to each shader kernel.
diff --git a/icd/intel/cmd_pipeline.c b/icd/intel/cmd_pipeline.c
index 0b638bf..969a523 100644
--- a/icd/intel/cmd_pipeline.c
+++ b/icd/intel/cmd_pipeline.c
@@ -994,7 +994,8 @@
}
static void emit_shader(struct intel_cmd *cmd,
- const struct intel_pipe_shader *shader)
+ const struct intel_pipe_shader *shader,
+ struct intel_cmd_shader *pCmdShader)
{
uint32_t i;
struct intel_cmd_shader *cmdShader;
@@ -1032,6 +1033,7 @@
cmdShader = &cmd->bind.shaderCache.shaderArray[cmd->bind.shaderCache.used];
cmdShader->shader = shader;
cmdShader->kernel_pos = cmd_kernel_copy(cmd, shader->pCode, shader->codeSize);
+ *pCmdShader = *cmdShader;
cmd->bind.shaderCache.used++;
return;
}
@@ -1046,22 +1048,22 @@
/* 3DSTATE_URB_VS and etc. */
assert(pipeline->cmd_len);
- cmd_batch_write_n(cmd, pipeline->cmds, pipeline->cmd_len * sizeof (uint32_t));
+ cmd_batch_write_n(cmd, pipeline->cmds, pipeline->cmd_len);
if (pipeline->active_shaders & SHADER_VERTEX_FLAG) {
- emit_shader(cmd, &pipeline->intel_vs);
+ emit_shader(cmd, &pipeline->intel_vs, &cmd->bind.vs);
}
if (pipeline->active_shaders & SHADER_GEOMETRY_FLAG) {
- emit_shader(cmd, &pipeline->gs);
+ emit_shader(cmd, &pipeline->gs, &cmd->bind.gs);
}
if (pipeline->active_shaders & SHADER_FRAGMENT_FLAG) {
- emit_shader(cmd, &pipeline->intel_fs);
+ emit_shader(cmd, &pipeline->intel_fs, &cmd->bind.fs);
}
if (pipeline->active_shaders & SHADER_TESS_CONTROL_FLAG) {
- emit_shader(cmd, &pipeline->tess_control);
+ emit_shader(cmd, &pipeline->tess_control, &cmd->bind.tess_control);
}
if (pipeline->active_shaders & SHADER_TESS_EVAL_FLAG) {
- emit_shader(cmd, &pipeline->tess_eval);
+ emit_shader(cmd, &pipeline->tess_eval, &cmd->bind.tess_eval);
}
}