Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion media_driver/agnostic/common/os/mos_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,8 @@ typedef enum _MOS_GPU_CONTEXT
MOS_GPU_CONTEXT_VEBOX2 = 13, // Vebox2
MOS_GPU_CONTEXT_COMPUTE = 14, //Compute Context
MOS_GPU_CONTEXT_CM_COMPUTE = 15, // MDF Compute
MOS_GPU_CONTEXT_MAX = 16,
MOS_GPU_CONTEXT_BLITTER = 16,
MOS_GPU_CONTEXT_MAX = 17,
MOS_GPU_CONTEXT_INVALID_HANDLE = 0xFFFFA
} MOS_GPU_CONTEXT, *PMOS_GPU_CONTEXT;

Expand Down
2 changes: 2 additions & 0 deletions media_driver/agnostic/common/vp/hal/media_srcs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ set(TMP_SOURCES_
${CMAKE_CURRENT_LIST_DIR}/vphal_render_ief.cpp
${CMAKE_CURRENT_LIST_DIR}/vphal_render_renderstate.cpp
${CMAKE_CURRENT_LIST_DIR}/vphal_render_sfc_base.cpp
${CMAKE_CURRENT_LIST_DIR}/vphal_render_blitter.cpp
${CMAKE_CURRENT_LIST_DIR}/vphal_render_vebox_base.cpp
${CMAKE_CURRENT_LIST_DIR}/vphal_render_vebox_iecp.cpp
${CMAKE_CURRENT_LIST_DIR}/vphal_render_vebox_procamp.cpp
Expand All @@ -49,6 +50,7 @@ set(TMP_HEADERS_
${CMAKE_CURRENT_LIST_DIR}/vphal_render_ief.h
${CMAKE_CURRENT_LIST_DIR}/vphal_render_renderstate.h
${CMAKE_CURRENT_LIST_DIR}/vphal_render_sfc_base.h
${CMAKE_CURRENT_LIST_DIR}/vphal_render_blitter.h
${CMAKE_CURRENT_LIST_DIR}/vphal_render_vebox_base.h
${CMAKE_CURRENT_LIST_DIR}/vphal_render_vebox_iecp.h
${CMAKE_CURRENT_LIST_DIR}/vphal_render_vebox_procamp.h
Expand Down
14 changes: 14 additions & 0 deletions media_driver/agnostic/common/vp/hal/vphal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,20 @@ MOS_STATUS VphalState::Allocate(
MOS_GPU_CONTEXT_VEBOX));
}

{
MOS_GPUCTX_CREATOPTIONS createOption1;
VPHAL_PUBLIC_CHK_STATUS(m_osInterface->pfnCreateGpuContext(
m_osInterface,
MOS_GPU_CONTEXT_BLITTER,
MOS_GPU_NODE_BLITTER,
&createOption1));
}

// Register BLITTER GPU context with the event
VPHAL_PUBLIC_CHK_STATUS(m_osInterface->pfnRegisterBBCompleteNotifyEvent(
m_osInterface,
MOS_GPU_CONTEXT_BLITTER));

// Allocate and initialize HW states
RenderHalSettings.iMediaStates = pVpHalSettings->mediaStates;
VPHAL_PUBLIC_CHK_STATUS(m_renderHal->pfnInitialize(m_renderHal, &RenderHalSettings));
Expand Down
4 changes: 3 additions & 1 deletion media_driver/agnostic/common/vp/hal/vphal_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,7 @@ struct VPHAL_RENDER_PARAMS

// extension parameters
void *pExtensionData; //!< Extension data
bool bBltMode;

VPHAL_RENDER_PARAMS() :
uSrcCount(0),
Expand All @@ -1097,7 +1098,8 @@ struct VPHAL_RENDER_PARAMS
bTriggerGPUHang(false),
#endif
bCalculatingAlpha(false),
pExtensionData(nullptr)
pExtensionData(nullptr),
bBltMode(false)
{
}

Expand Down
125 changes: 125 additions & 0 deletions media_driver/agnostic/common/vp/hal/vphal_render_blitter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
#include "vphal_render_blitter.h"
#include <unistd.h>
#include "vphal_renderer.h"
#include "vphal_debug.h"


VPHAL_BLITTER_STATE::VPHAL_BLITTER_STATE(
PMOS_INTERFACE pOsInterface,
PRENDERHAL_INTERFACE pRenderHal,
PVPHAL_RNDR_PERF_DATA pPerfData,
MOS_STATUS *peStatus
):RenderState(pOsInterface, pRenderHal, pPerfData, peStatus)
{}


VPHAL_BLITTER_STATE::~VPHAL_BLITTER_STATE()
{}

int VPHAL_BLITTER_STATE::iframe=0;

MOS_STATUS VPHAL_BLITTER_STATE::Initialize(
const VphalSettings *pSettings,
Kdll_State *pKernelDllState)
{
MOS_STATUS eStatus;
PRENDERHAL_INTERFACE pRenderHal;
PVPHAL_BLITTER_STATE pBlitterState = this;

eStatus = MOS_STATUS_SUCCESS;
pRenderHal = pBlitterState->m_pRenderHal;

if(pRenderHal == nullptr)
{
eStatus = MOS_STATUS_UNKNOWN;
goto finish;
}

MOS_UNUSED(pSettings);
VPHAL_RENDER_CHK_NULL(pKernelDllState);

if(m_reporting == nullptr)
{
m_reporting = MOS_New(VphalFeatureReport);
}

pBlitterState->m_pKernelDllState = pKernelDllState;

finish:
return eStatus;

}

MOS_STATUS VPHAL_BLITTER_STATE::Render(
PCVPHAL_RENDER_PARAMS pcRenderParams,
RenderpassData *pRenderPassData) // RenderpassData isn't used
{
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;

PVPHAL_SURFACE pSrcSurface;
PVPHAL_SURFACE pOutputSurface;
PMOS_INTERFACE pOsInterface;

pSrcSurface = pcRenderParams->pSrc[0];
pOutputSurface = pcRenderParams->pTarget[0];
PVPHAL_BLITTER_STATE pBlitterState = this;
pOsInterface = pBlitterState->m_pOsInterface;

MOS_UNUSED(pcRenderParams);
VPHAL_RENDER_ASSERT(pSrcSurface);
VPHAL_RENDER_ASSERT(pOutputSurface);

drm_intel_bo_switch(pSrcSurface->OsResource.bo , pOutputSurface->OsResource.bo, pSrcSurface->OsResource.pGmmResInfo->GetBaseHeight() * 3 / 2, pSrcSurface->OsResource.pGmmResInfo->GetRenderPitch());

/* The first frame could get good result after waiting a period of time. This will be modified soon.*/
if (iframe == 0)
{
usleep(10000); //sleep 10ms for the first frame
iframe++;
}

VpHal_RndrUpdateStatusTableAfterSubmit(pOsInterface, &m_StatusTableUpdateParams, MOS_GPU_CONTEXT_BLITTER, eStatus);
return eStatus;
}

MOS_STATUS VpHal_RndrRenderBlitter(
VphalRenderer *pRenderer,
PVPHAL_RENDER_PARAMS pRenderParams,
RenderpassData *pRenderPassData)
{
MOS_STATUS eStatus;
PMOS_INTERFACE pOsInterface;
RenderState *pRenderState;
VphalFeatureReport* pReport;


//------------------------------------------------------
VPHAL_RENDER_ASSERT(pRenderer);
VPHAL_RENDER_ASSERT(pRenderParams);
//------------------------------------------------------

eStatus = MOS_STATUS_SUCCESS;
pReport = pRenderer->GetReport();
pRenderState = pRenderer->pRender[VPHAL_RENDER_ID_BLITTER];



VPHAL_RENDER_CHK_NULL(pRenderState);
VPHAL_RENDER_ASSERT(pRenderState->GetRenderHalInterface());

pRenderer->pRender[VPHAL_RENDER_ID_BLITTER]->SetStatusReportParams(pRenderer, pRenderParams);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which place to initialize the "uiCurrentChannel"? Suggest to use VPHAL_RENDER_ID_BLITTER to find the render instance.

VPHAL_RENDER_CHK_STATUS(pRenderState->Render(
pRenderParams,
pRenderPassData));

pRenderState->CopyReporting(pReport);

finish:
VPHAL_RENDER_NORMALMESSAGE("VPOutputPipe = %d, VEFeatureInUse = %d",
pRenderer->GetReport()->OutputPipeMode, pRenderer->GetReport()->VEFeatureInUse);

return eStatus;


}
78 changes: 78 additions & 0 deletions media_driver/agnostic/common/vp/hal/vphal_render_blitter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*buffer sharing in hal layer for video copy*/
//!
//! \file vphal_render_blitter.h
//! \brief Common interface and structure used in Blitter
//! \details Common interface and structure used in Blitter which are platform independent
//!

#ifndef __VPHAL_RENDER_BLITTER_H__
#define __VPHAL_RENDER_BLITTER_H__

#include "vphal_render_renderstate.h"
#include "vphal_common.h"
#include "hal_kerneldll.h"
#include "mos_os.h"




typedef class VPHAL_BLITTER_STATE *PVPHAL_BLITTER_STATE;

class VPHAL_BLITTER_STATE : public RenderState
{

public:

Kdll_State *m_pKernelDllState; //!< Kernel DLL state
static int iframe;

VPHAL_BLITTER_STATE(
PMOS_INTERFACE pOsInterface,
PRENDERHAL_INTERFACE pRenderHal,
PVPHAL_RNDR_PERF_DATA pPerfData,
MOS_STATUS *peStatus
);

VPHAL_BLITTER_STATE( const VPHAL_BLITTER_STATE& ) = delete;
VPHAL_BLITTER_STATE& operator=(const VPHAL_BLITTER_STATE&) = delete;

virtual ~VPHAL_BLITTER_STATE();

virtual MOS_STATUS Initialize(
const VphalSettings *pSettings,
Kdll_State *pKernelDllState);

virtual void Destroy()
{};

virtual bool IsNeeded(
PCVPHAL_RENDER_PARAMS pcRenderParams,
RenderpassData *pRenderPassData)
{

return false;
};


virtual bool IsMultipleStreamSupported()
{

return false;
};


virtual MOS_STATUS Render(
PCVPHAL_RENDER_PARAMS pcRenderParams,
RenderpassData *pRenderPassData);

};

MOS_STATUS VpHal_RndrRenderBlitter(
VphalRenderer *pRenderer,
PVPHAL_RENDER_PARAMS pRenderParams,
RenderpassData *pRenderPassData);


#endif // __VPHAL_RENDER_BLITTER_H__


24 changes: 19 additions & 5 deletions media_driver/agnostic/common/vp/hal/vphal_renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
//! \file vphal_renderer.cpp
//! \brief VPHAL top level rendering component and the entry to low level renderers
//! \details The top renderer is responsible for coordinating the sequence of calls to low level renderers, e.g. DNDI or Comp
//!
//i!
#include "vphal_renderer.h"
#include "vphal_debug.h"
#include "vpkrnheader.h"
Expand Down Expand Up @@ -764,10 +764,20 @@ MOS_STATUS VphalRenderer::RenderSingleStream(
VPHAL_RNDR_DUMP_SURF(
this, pRenderPassData->uiSrcIndex, VPHAL_DBG_DUMP_TYPE_PRE_DNDI, pRenderPassData->pSrcSurface);

VPHAL_RENDER_CHK_STATUS(VpHal_RndrRenderVebox(
this,
pRenderParams,
pRenderPassData));
if(pRenderParams->bBltMode == false )
{
VPHAL_RENDER_CHK_STATUS(VpHal_RndrRenderVebox(
this,
pRenderParams,
pRenderPassData));
}
else
{
VPHAL_RENDER_CHK_STATUS(VpHal_RndrRenderBlitter(
this,
pRenderParams,
pRenderPassData));
}

if (pRenderPassData->bOutputGenerated)
{
Expand Down Expand Up @@ -1180,6 +1190,10 @@ MOS_STATUS VphalRenderer::Initialize(
pSettings,
pKernelDllState));

VPHAL_RENDER_CHK_STATUS(pRender[VPHAL_RENDER_ID_BLITTER]->Initialize(
pSettings,
pKernelDllState));

AllocateDebugDumper();

if (MEDIA_IS_SKU(m_pSkuTable, FtrVpDisableFor4K))
Expand Down
5 changes: 3 additions & 2 deletions media_driver/agnostic/common/vp/hal/vphal_renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#include "vphal_render_common.h"
#include "vphal_render_renderstate.h"
#include "vphal_render_vebox_base.h"

#include "vphal_render_blitter.h"
#include "vphal_debug.h"

#define VPHAL_RNDR_TEMP_OUT_SURFS 2
Expand Down Expand Up @@ -101,9 +101,10 @@ enum VPHAL_RENDER_ID
VPHAL_RENDER_ID_VEBOX = 0,
VPHAL_RENDER_ID_VEBOX2,
VPHAL_RENDER_ID_COMPOSITE,
VPHAL_RENDER_ID_BLITTER,
VPHAL_RENDER_ID_COUNT //!< Keep this line at the end
};
C_ASSERT(VPHAL_RENDER_ID_COUNT == 3); //!< When adding, update assert
C_ASSERT(VPHAL_RENDER_ID_COUNT == 4); //!< When adding, update assert

//!
//! \brief VPHAL renderer class
Expand Down
16 changes: 15 additions & 1 deletion media_driver/agnostic/gen9/vp/hal/vphal_renderer_g9.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include "igvpkrn_g9.h"
#include "vphal_render_vebox_g9_base.h"
#include "vphal_render_composite_g9.h"

#include "vphal_render_blitter.h"
extern const Kdll_RuleEntry g_KdllRuleTable_g9[];

void VphalRendererG9::GetCacheCntl(
Expand Down Expand Up @@ -159,6 +159,20 @@ MOS_STATUS VphalRendererG9::AllocateRenderComponents(
VPHAL_RENDER_ASSERTMESSAGE("Allocate Composite Render Fail.");
return eStatus;
}

pRender[VPHAL_RENDER_ID_BLITTER] = MOS_New(
VPHAL_BLITTER_STATE,
m_pOsInterface,
m_pRenderHal,
&PerfData,
&eStatus);
if (!pRender[VPHAL_RENDER_ID_BLITTER] ||
(eStatus != MOS_STATUS_SUCCESS))
{
eStatus = MOS_STATUS_NO_SPACE;
VPHAL_RENDER_ASSERTMESSAGE("Allocate Blitter Render Fail.");
return eStatus;
}

return eStatus;
}
Expand Down
6 changes: 5 additions & 1 deletion media_driver/linux/common/ddi/media_libva_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ VAStatus DdiMediaUtil_AllocateSurface(
case Media_Format_Y216:
case Media_Format_AYUV:
case Media_Format_Y410:
case Media_Format_Y416:
case Media_Format_Y416:
if (VA_SURFACE_ATTRIB_USAGE_HINT_ENCODER != mediaSurface->surfaceUsageHint)
{
#if UFO_GRALLOC_NEW_FORMAT
Expand All @@ -363,6 +363,10 @@ VAStatus DdiMediaUtil_AllocateSurface(
#endif
}
tileformat = I915_TILING_Y;
if (mediaSurface->surfaceUsageHint == 0x00000040)
{
tileformat = I915_TILING_NONE;
}
break;
case Media_Format_Buffer:
tileformat = I915_TILING_NONE;
Expand Down
Loading