mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 14:00:16 +01:00
anv: Don't add dynamic state base address to push constants on Gen7
Because Gen7 push constants are already relative to dynamic state base
address, they aren't really an address. It's deceptive to return an
address from the helper function. Instead, let's leave it as a
special-case in the gen7-11 helper; we don't need the helper for code
de-duplication for Gen7 anyway.
Fixes: 67d2cb3e93 "anv: Add get_push_range_address() helper"
Closes: #2323
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
parent
044da65f52
commit
ca6b3b11af
1 changed files with 20 additions and 14 deletions
|
|
@ -2532,12 +2532,12 @@ cmd_buffer_emit_descriptor_pointers(struct anv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
#if GEN_GEN >= 8 || GEN_IS_HASWELL
|
||||
static struct anv_address
|
||||
get_push_range_address(struct anv_cmd_buffer *cmd_buffer,
|
||||
gl_shader_stage stage,
|
||||
const struct anv_push_range *range)
|
||||
{
|
||||
#if GEN_GEN >= 8 || GEN_IS_HASWELL
|
||||
const struct anv_cmd_graphics_state *gfx_state = &cmd_buffer->state.gfx;
|
||||
switch (range->set) {
|
||||
case ANV_DESCRIPTOR_SET_DESCRIPTORS: {
|
||||
|
|
@ -2581,20 +2581,8 @@ get_push_range_address(struct anv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* For Ivy Bridge, push constants are relative to dynamic state
|
||||
* base address and we only ever push actual push constants.
|
||||
*/
|
||||
assert(range->length > 0);
|
||||
assert(range->set == ANV_DESCRIPTOR_SET_PUSH_CONSTANTS);
|
||||
struct anv_state state =
|
||||
anv_cmd_buffer_push_constants(cmd_buffer, stage);
|
||||
return (struct anv_address) {
|
||||
.bo = cmd_buffer->device->dynamic_state_pool.block_pool.bo,
|
||||
.offset = state.offset,
|
||||
};
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
cmd_buffer_emit_push_constant(struct anv_cmd_buffer *cmd_buffer,
|
||||
|
|
@ -2622,6 +2610,7 @@ cmd_buffer_emit_push_constant(struct anv_cmd_buffer *cmd_buffer,
|
|||
const struct anv_pipeline_bind_map *bind_map =
|
||||
&pipeline->shaders[stage]->bind_map;
|
||||
|
||||
#if GEN_GEN >= 8 || GEN_IS_HASWELL
|
||||
/* The Skylake PRM contains the following restriction:
|
||||
*
|
||||
* "The driver must ensure The following case does not occur
|
||||
|
|
@ -2652,6 +2641,23 @@ cmd_buffer_emit_push_constant(struct anv_cmd_buffer *cmd_buffer,
|
|||
c.ConstantBody.Buffer[i + shift] =
|
||||
anv_address_add(addr, range->start * 32);
|
||||
}
|
||||
#else
|
||||
/* For Ivy Bridge, push constants are relative to dynamic state
|
||||
* base address and we only ever push actual push constants.
|
||||
*/
|
||||
if (bind_map->push_ranges[0].length > 0) {
|
||||
assert(bind_map->push_ranges[0].set ==
|
||||
ANV_DESCRIPTOR_SET_PUSH_CONSTANTS);
|
||||
struct anv_state state =
|
||||
anv_cmd_buffer_push_constants(cmd_buffer, stage);
|
||||
c.ConstantBody.ReadLength[0] = bind_map->push_ranges[0].length;
|
||||
c.ConstantBody.Buffer[0].bo = NULL;
|
||||
c.ConstantBody.Buffer[0].offset = state.offset;
|
||||
}
|
||||
assert(bind_map->push_ranges[1].length == 0);
|
||||
assert(bind_map->push_ranges[2].length == 0);
|
||||
assert(bind_map->push_ranges[3].length == 0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue