summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b6b0332)
Found by inspection. However, I expect it fixes real bugs when using
blorp from Vulkan on little-core platforms.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: "13.0 17.0" <mesa-stable@lists.freedesktop.org>
unsigned state_size, unsigned state_alignment,
uint32_t *bt_offset, uint32_t *surface_offsets,
void **surface_maps);
unsigned state_size, unsigned state_alignment,
uint32_t *bt_offset, uint32_t *surface_offsets,
void **surface_maps);
+
+static void
+blorp_flush_range(struct blorp_batch *batch, void *start, size_t size);
+
static void
blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset,
struct blorp_address address, uint32_t delta);
static void
blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset,
struct blorp_address address, uint32_t delta);
void *data = blorp_alloc_vertex_buffer(batch, sizeof(vertices), addr);
memcpy(data, vertices, sizeof(vertices));
*size = sizeof(vertices);
void *data = blorp_alloc_vertex_buffer(batch, sizeof(vertices), addr);
memcpy(data, vertices, sizeof(vertices));
*size = sizeof(vertices);
+ blorp_flush_range(batch, data, *size);
*size = 16 + num_varyings * vec4_size_in_bytes;
const uint32_t *const inputs_src = (const uint32_t *)¶ms->wm_inputs;
*size = 16 + num_varyings * vec4_size_in_bytes;
const uint32_t *const inputs_src = (const uint32_t *)¶ms->wm_inputs;
- uint32_t *inputs = blorp_alloc_vertex_buffer(batch, *size, addr);
+ void *data = blorp_alloc_vertex_buffer(batch, *size, addr);
+ uint32_t *inputs = data;
/* Copy in the VS inputs */
assert(sizeof(params->vs_inputs) == 16);
/* Copy in the VS inputs */
assert(sizeof(params->vs_inputs) == 16);
+
+ blorp_flush_range(batch, data, *size);
GENX(BLEND_STATE_length) * 4,
64, &offset);
GENX(BLEND_STATE_pack)(NULL, state, &blend);
GENX(BLEND_STATE_length) * 4,
64, &offset);
GENX(BLEND_STATE_pack)(NULL, state, &blend);
+ blorp_flush_range(batch, state, GENX(BLEND_STATE_length) * 4);
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_BLEND_STATE_POINTERS), sp) {
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_BLEND_STATE_POINTERS), sp) {
GENX(COLOR_CALC_STATE_length) * 4,
64, &offset);
GENX(COLOR_CALC_STATE_pack)(NULL, state, &cc);
GENX(COLOR_CALC_STATE_length) * 4,
64, &offset);
GENX(COLOR_CALC_STATE_pack)(NULL, state, &cc);
+ blorp_flush_range(batch, state, GENX(COLOR_CALC_STATE_length) * 4);
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_CC_STATE_POINTERS), sp) {
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_CC_STATE_POINTERS), sp) {
GENX(DEPTH_STENCIL_STATE_length) * 4,
64, &offset);
GENX(DEPTH_STENCIL_STATE_pack)(NULL, state, &ds);
GENX(DEPTH_STENCIL_STATE_length) * 4,
64, &offset);
GENX(DEPTH_STENCIL_STATE_pack)(NULL, state, &ds);
+ blorp_flush_range(batch, state, GENX(DEPTH_STENCIL_STATE_length) * 4);
blorp_surface_reloc(batch, state_offset + isl_dev->ss.aux_addr_offset,
surface->aux_addr, *aux_addr);
}
blorp_surface_reloc(batch, state_offset + isl_dev->ss.aux_addr_offset,
surface->aux_addr, *aux_addr);
}
+
+ blorp_flush_range(batch, state, GENX(RENDER_SURFACE_STATE_length) * 4);
};
GENX(RENDER_SURFACE_STATE_pack)(NULL, state, &ss);
};
GENX(RENDER_SURFACE_STATE_pack)(NULL, state, &ss);
+
+ blorp_flush_range(batch, state, GENX(RENDER_SURFACE_STATE_length) * 4);
GENX(SAMPLER_STATE_length) * 4,
32, &offset);
GENX(SAMPLER_STATE_pack)(NULL, state, &sampler);
GENX(SAMPLER_STATE_length) * 4,
32, &offset);
GENX(SAMPLER_STATE_pack)(NULL, state, &sampler);
+ blorp_flush_range(batch, state, GENX(SAMPLER_STATE_length) * 4);
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_SAMPLER_STATE_POINTERS_PS), ssp) {
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_SAMPLER_STATE_POINTERS_PS), ssp) {
.MinimumDepth = 0.0,
.MaximumDepth = 1.0,
});
.MinimumDepth = 0.0,
.MaximumDepth = 1.0,
});
+ blorp_flush_range(batch, state, GENX(CC_VIEWPORT_length) * 4);
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_VIEWPORT_STATE_POINTERS_CC), vsp) {
#if GEN_GEN >= 7
blorp_emit(batch, GENX(3DSTATE_VIEWPORT_STATE_POINTERS_CC), vsp) {
surface_offsets[i] = surface_state.offset;
surface_maps[i] = surface_state.map;
}
surface_offsets[i] = surface_state.offset;
surface_maps[i] = surface_state.map;
}
+
+ if (!cmd_buffer->device->info.has_llc)
+ anv_state_clflush(bt_state);
+static void
+blorp_flush_range(struct blorp_batch *batch, void *start, size_t size)
+{
+ struct anv_device *device = batch->blorp->driver_ctx;
+ if (!device->info.has_llc)
+ anv_clflush_range(start, size);
+}
+
static void
blorp_emit_urb_config(struct blorp_batch *batch, unsigned vs_entry_size)
{
static void
blorp_emit_urb_config(struct blorp_batch *batch, unsigned vs_entry_size)
{
+static void
+blorp_flush_range(struct blorp_batch *batch, void *start, size_t size)
+{
+ /* All allocated states come from the batch which we will flush before we
+ * submit it. There's nothing for us to do here.
+ */
+}
+
static void
blorp_emit_urb_config(struct blorp_batch *batch, unsigned vs_entry_size)
{
static void
blorp_emit_urb_config(struct blorp_batch *batch, unsigned vs_entry_size)
{