diff options
author | Yang Rong <rong.r.yang@intel.com> | 2015-01-14 14:21:40 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2015-01-29 16:14:07 +0800 |
commit | e70bd079498255b6b14f3c3e12ac4628d1b24813 (patch) | |
tree | 10e8fcca63a12fe4381cff8581dcc432f493ef79 /src | |
parent | 2e86b9d47b646fcd1c2b045ddd056bf8cc841f61 (diff) |
SKL: correct the pipe control struct.
From BDW, pipe control need 6 DW, correct it. Also affect BDW.
Signed-off-by: Yang Rong <rong.r.yang@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/intel/intel_gpgpu.c | 23 | ||||
-rw-r--r-- | src/intel/intel_structs.h | 56 |
2 files changed, 77 insertions, 2 deletions
diff --git a/src/intel/intel_gpgpu.c b/src/intel/intel_gpgpu.c index 4c095b9c..cd45ff9f 100644 --- a/src/intel/intel_gpgpu.c +++ b/src/intel/intel_gpgpu.c @@ -626,6 +626,25 @@ intel_gpgpu_pipe_control_gen75(intel_gpgpu_t *gpgpu) } static void +intel_gpgpu_pipe_control_gen8(intel_gpgpu_t *gpgpu) +{ + gen8_pipe_control_t* pc = (gen8_pipe_control_t*) + intel_batchbuffer_alloc_space(gpgpu->batch, sizeof(gen8_pipe_control_t)); + memset(pc, 0, sizeof(*pc)); + pc->dw0.length = SIZEOF32(gen8_pipe_control_t) - 2; + pc->dw0.instruction_subopcode = GEN7_PIPE_CONTROL_SUBOPCODE_3D_CONTROL; + pc->dw0.instruction_opcode = GEN7_PIPE_CONTROL_OPCODE_3D_CONTROL; + pc->dw0.instruction_pipeline = GEN7_PIPE_CONTROL_3D; + pc->dw0.instruction_type = GEN7_PIPE_CONTROL_INSTRUCTION_GFX; + pc->dw1.render_target_cache_flush_enable = 1; + pc->dw1.texture_cache_invalidation_enable = 1; + pc->dw1.cs_stall = 1; + pc->dw1.dc_flush_enable = 1; + //pc->dw1.instruction_cache_invalidate_enable = 1; + ADVANCE_BATCH(gpgpu->batch); +} + +static void intel_gpgpu_set_L3_gen7(intel_gpgpu_t *gpgpu, uint32_t use_slm) { BEGIN_BATCH(gpgpu->batch, 9); @@ -2007,7 +2026,7 @@ intel_set_gpgpu_callbacks(int device_id) intel_gpgpu_load_curbe_buffer = intel_gpgpu_load_curbe_buffer_gen8; intel_gpgpu_load_idrt = intel_gpgpu_load_idrt_gen8; cl_gpgpu_bind_sampler = (cl_gpgpu_bind_sampler_cb *) intel_gpgpu_bind_sampler_gen8; - intel_gpgpu_pipe_control = intel_gpgpu_pipe_control_gen7; + intel_gpgpu_pipe_control = intel_gpgpu_pipe_control_gen8; return; } if (IS_SKYLAKE(device_id)) { @@ -2025,7 +2044,7 @@ intel_set_gpgpu_callbacks(int device_id) intel_gpgpu_load_curbe_buffer = intel_gpgpu_load_curbe_buffer_gen8; intel_gpgpu_load_idrt = intel_gpgpu_load_idrt_gen8; cl_gpgpu_bind_sampler = (cl_gpgpu_bind_sampler_cb *) intel_gpgpu_bind_sampler_gen8; - intel_gpgpu_pipe_control = intel_gpgpu_pipe_control_gen7; + intel_gpgpu_pipe_control = intel_gpgpu_pipe_control_gen8; return; } diff --git a/src/intel/intel_structs.h b/src/intel/intel_structs.h index 258fbb9b..b4635f49 100644 --- a/src/intel/intel_structs.h +++ b/src/intel/intel_structs.h @@ -498,6 +498,62 @@ typedef struct gen6_pipe_control } dw4; } gen6_pipe_control_t; +typedef struct gen8_pipe_control +{ + struct { + uint32_t length : BITFIELD_RANGE(0, 7); + uint32_t reserved : BITFIELD_RANGE(8, 15); + uint32_t instruction_subopcode : BITFIELD_RANGE(16, 23); + uint32_t instruction_opcode : BITFIELD_RANGE(24, 26); + uint32_t instruction_pipeline : BITFIELD_RANGE(27, 28); + uint32_t instruction_type : BITFIELD_RANGE(29, 31); + } dw0; + + struct { + uint32_t depth_cache_flush_enable : BITFIELD_BIT(0); + uint32_t stall_at_pixel_scoreboard : BITFIELD_BIT(1); + uint32_t state_cache_invalidation_enable : BITFIELD_BIT(2); + uint32_t constant_cache_invalidation_enable : BITFIELD_BIT(3); + uint32_t vf_cache_invalidation_enable : BITFIELD_BIT(4); + uint32_t dc_flush_enable : BITFIELD_BIT(5); + uint32_t protected_memory_app_id : BITFIELD_BIT(6); + uint32_t pipe_control_flush_enable : BITFIELD_BIT(7); + uint32_t notify_enable : BITFIELD_BIT(8); + uint32_t indirect_state_pointers_disable : BITFIELD_BIT(9); + uint32_t texture_cache_invalidation_enable : BITFIELD_BIT(10); + uint32_t instruction_cache_invalidate_enable : BITFIELD_BIT(11); + uint32_t render_target_cache_flush_enable : BITFIELD_BIT(12); + uint32_t depth_stall_enable : BITFIELD_BIT(13); + uint32_t post_sync_operation : BITFIELD_RANGE(14, 15); + uint32_t generic_media_state_clear : BITFIELD_BIT(16); + uint32_t synchronize_gfdt_surface : BITFIELD_BIT(17); + uint32_t tlb_invalidate : BITFIELD_BIT(18); + uint32_t global_snapshot_count_reset : BITFIELD_BIT(19); + uint32_t cs_stall : BITFIELD_BIT(20); + uint32_t store_data_index : BITFIELD_BIT(21); + uint32_t protected_memory_enable : BITFIELD_BIT(22); + uint32_t reserved : BITFIELD_RANGE(23, 31); + } dw1; + + struct { + uint32_t reserved : BITFIELD_RANGE(0, 1); + uint32_t destination_address_type : BITFIELD_BIT(2); + uint32_t address : BITFIELD_RANGE(3, 31); + } dw2; + + struct { + uint32_t data; + } dw3; + + struct { + uint32_t data; + } dw4; + + struct { + uint32_t data; + } dw5; +} gen8_pipe_control_t; + typedef struct gen6_sampler_state { struct { |