summaryrefslogtreecommitdiff
path: root/src/i965_gpe_utils.c
diff options
context:
space:
mode:
authorQu, PengFei <pengfei.qu@intel.com>2016-05-30 09:56:00 -0400
committerXiang, Haihao <haihao.xiang@intel.com>2016-06-13 20:59:47 +0800
commitdd9a0fb7a885f79f6413df0bd1afd5556c919a03 (patch)
treebc26f37a728fd0e880dcb03dac3767be2fe497f4 /src/i965_gpe_utils.c
parent7b823b8fe7d3d4b166852b8714abe52d4344d0fc (diff)
Follow the HW spec to set the surface cache attribute for Gen9+
Currently it will use the unoptimized cache attribute for the surface on Gen9+. This is to follow the HW spec to optimize the cache attribute of the surface for gen9+. Signed-off-by: Qu, Pengfei <pengfei.qu@intel.com> Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Diffstat (limited to 'src/i965_gpe_utils.c')
-rw-r--r--src/i965_gpe_utils.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/i965_gpe_utils.c b/src/i965_gpe_utils.c
index 91d1192..d911196 100644
--- a/src/i965_gpe_utils.c
+++ b/src/i965_gpe_utils.c
@@ -721,6 +721,7 @@ gen8_gpe_set_surface2_state(VADriverContextP ctx,
struct object_surface *obj_surface,
struct gen8_surface_state2 *ss)
{
+ struct i965_driver_data *i965 = i965_driver_data(ctx);
int w, h, w_pitch;
unsigned int tiling, swizzle;
@@ -734,6 +735,9 @@ gen8_gpe_set_surface2_state(VADriverContextP ctx,
memset(ss, 0, sizeof(*ss));
/* ss0 */
+ if (IS_GEN9(i965->intel.device_info))
+ ss->ss5.surface_object_mocs = GEN9_CACHE_PTE;
+
ss->ss6.base_addr = (uint32_t)obj_surface->bo->offset64;
ss->ss7.base_addr_high = (uint32_t)(obj_surface->bo->offset64 >> 32);
/* ss1 */
@@ -782,6 +786,7 @@ gen8_gpe_set_media_rw_surface_state(VADriverContextP ctx,
struct object_surface *obj_surface,
struct gen8_surface_state *ss)
{
+ struct i965_driver_data *i965 = i965_driver_data(ctx);
int w, h, w_pitch;
unsigned int tiling, swizzle;
@@ -792,6 +797,9 @@ gen8_gpe_set_media_rw_surface_state(VADriverContextP ctx,
memset(ss, 0, sizeof(*ss));
/* ss0 */
+ if (IS_GEN9(i965->intel.device_info))
+ ss->ss1.surface_mocs = GEN9_CACHE_PTE;
+
ss->ss0.surface_type = I965_SURFACE_2D;
ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM;
/* ss1 */
@@ -810,6 +818,7 @@ gen8_gpe_set_media_chroma_surface_state(VADriverContextP ctx,
struct object_surface *obj_surface,
struct gen8_surface_state *ss)
{
+ struct i965_driver_data *i965 = i965_driver_data(ctx);
int w, w_pitch;
unsigned int tiling, swizzle;
int cbcr_offset;
@@ -822,6 +831,9 @@ gen8_gpe_set_media_chroma_surface_state(VADriverContextP ctx,
cbcr_offset = obj_surface->height * obj_surface->width;
memset(ss, 0, sizeof(*ss));
/* ss0 */
+ if (IS_GEN9(i965->intel.device_info))
+ ss->ss1.surface_mocs = GEN9_CACHE_PTE;
+
ss->ss0.surface_type = I965_SURFACE_2D;
ss->ss0.surface_format = I965_SURFACEFORMAT_R8_UNORM;
/* ss1 */
@@ -897,6 +909,7 @@ gen8_gpe_set_buffer_surface_state(VADriverContextP ctx,
struct i965_buffer_surface *buffer_surface,
struct gen8_surface_state *ss)
{
+ struct i965_driver_data *i965 = i965_driver_data(ctx);
int num_entries;
assert(buffer_surface->bo);
@@ -905,6 +918,9 @@ gen8_gpe_set_buffer_surface_state(VADriverContextP ctx,
memset(ss, 0, sizeof(*ss));
/* ss0 */
ss->ss0.surface_type = I965_SURFACE_BUFFER;
+ if (IS_GEN9(i965->intel.device_info))
+ ss->ss1.surface_mocs = GEN9_CACHE_PTE;
+
/* ss1 */
ss->ss8.base_addr = (uint32_t)buffer_surface->bo->offset64;
ss->ss9.base_addr_high = (uint32_t)(buffer_surface->bo->offset64 >> 32);