void App_WrCoCmd_Buffer(Gpu_Hal_Context_t *phost,uint32_t cmd)
{
#ifdef  BUFFER_OPTIMIZATION
    /* Copy the command instruction into buffer */
    uint32_t *pBuffcmd;
	/* Prevent buffer overflow */
	if (CmdBuffer_Index >= CMD_FIFO_SIZE)
	{
		//printf("CmdBuffer overflow\n");

		if (CmdBuffer_Index > 0) {
			Gpu_Hal_WrCmdBuf_nowait(phost, CmdBuffer, CmdBuffer_Index);
		}
		CmdBuffer_Index = 0;
	}

	pBuffcmd = (uint32_t*)&CmdBuffer[CmdBuffer_Index]; //Die Adresse vom aktuellen Index des CMD_Buffers gelesen
	*pBuffcmd = cmd;  //Befehl wird einfach in die entsprechende Stelle des CMD Buffers geschrieben, Befehl 4 Byte, daher 32 Bit Variable


#endif

#if (defined(STM32_PLATFORM))
    Gpu_Hal_WrCmd32(phost,cmd);
#endif
    /* Increment the command index */
    CmdBuffer_Index += CMD_SIZE;
}

void App_WrDl_Buffer(Gpu_Hal_Context_t *phost,uint32_t cmd)
{
#ifdef BUFFER_OPTIMIZATION
    /* Copy the command instruction into buffer */
    uint32_t *pBuffcmd;
	/* Prevent buffer overflow */
	if (DlBuffer_Index < DL_SIZE)
	{
		pBuffcmd = (uint32_t*)&DlBuffer[DlBuffer_Index];
		*pBuffcmd = cmd;
	}
	else
	{
		printf("DlBuffer overflow\n");
	}

#endif

#if (defined(STM32_PLATFORM))
    Gpu_Hal_Wr32(phost,(RAM_DL+DlBuffer_Index),cmd);
#endif
    /* Increment the command index */
    DlBuffer_Index += CMD_SIZE;
}

//Den DL Buffer, den es nur bei eingeschalteter Optimierung gibt, in den RAM_DL schreiben
void App_Flush_DL_Buffer(Gpu_Hal_Context_t *phost)
{
#ifdef  BUFFER_OPTIMIZATION
    if (DlBuffer_Index> 0)
    Gpu_Hal_WrMem(phost,RAM_DL,DlBuffer,DlBuffer_Index);
#endif
    DlBuffer_Index = 0;
}

//Den Cmd Buffer, denn es nur bei eingeschalteter Optimierung gibt, in den RAM_CMD schreiben
void App_Flush_Co_Buffer(Gpu_Hal_Context_t *phost)
{
#ifdef  BUFFER_OPTIMIZATION
    if (CmdBuffer_Index > 0)
    Gpu_Hal_WrCmdBuf(phost,CmdBuffer,CmdBuffer_Index);
#endif
    CmdBuffer_Index = 0;
}