1745450adSAlexander von Gluck IV /* 2745450adSAlexander von Gluck IV * Copyright 2012, Haiku, Inc. All Rights Reserved. 3745450adSAlexander von Gluck IV * Distributed under the terms of the MIT License. 4745450adSAlexander von Gluck IV * 5745450adSAlexander von Gluck IV * Authors: 6745450adSAlexander von Gluck IV * Alexander von Gluck, kallisti5@unixzen.com 7745450adSAlexander von Gluck IV */ 8745450adSAlexander von Gluck IV #ifndef _RADEON_HD_RINGQUEUE_H 9745450adSAlexander von Gluck IV #define _RADEON_HD_RINGQUEUE_H 10745450adSAlexander von Gluck IV 11745450adSAlexander von Gluck IV 12745450adSAlexander von Gluck IV #include "Accelerant.h" 13745450adSAlexander von Gluck IV 14*9e195872SAlexander von Gluck IV #include <stdint.h> 15*9e195872SAlexander von Gluck IV 16745450adSAlexander von Gluck IV 17745450adSAlexander von Gluck IV #define RADEON_QUEUE_MAX 3 18745450adSAlexander von Gluck IV // Basic r100+ graphic data ring 19745450adSAlexander von Gluck IV #define RADEON_QUEUE_TYPE_GFX_INDEX 0 20745450adSAlexander von Gluck IV // Cayman+ have two compute command processor rings 21745450adSAlexander von Gluck IV #define CAYMAN_QUEUE_TYPE_CP1_INDEX 1 22745450adSAlexander von Gluck IV #define CAYMAN_QUEUE_TYPE_CP2_INDEX 2 23745450adSAlexander von Gluck IV 24745450adSAlexander von Gluck IV 25*9e195872SAlexander von Gluck IV int compute_order(unsigned long size); 26*9e195872SAlexander von Gluck IV 27*9e195872SAlexander von Gluck IV 28745450adSAlexander von Gluck IV // A basic ring buffer for passing render data into card. 29745450adSAlexander von Gluck IV // Data flows from the host to the GPU 30745450adSAlexander von Gluck IV class RingQueue { 31745450adSAlexander von Gluck IV public: 32745450adSAlexander von Gluck IV RingQueue(size_t bytes, uint32 queueType); 33745450adSAlexander von Gluck IV ~RingQueue(); 34745450adSAlexander von Gluck IV size_t Read(unsigned char* data, size_t bytes); 35745450adSAlexander von Gluck IV size_t Write(unsigned char* data, size_t bytes); 36745450adSAlexander von Gluck IV status_t Empty(); 37745450adSAlexander von Gluck IV GetSize()385af067fbSAlexander von Gluck IV size_t GetSize() {return fSize;}; GetWriteAvail()395af067fbSAlexander von Gluck IV size_t GetWriteAvail() {return fWriteBytesAvail;} GetReadAvail()405af067fbSAlexander von Gluck IV size_t GetReadAvail() {return fSize - fWriteBytesAvail;} GetLocation()41*9e195872SAlexander von Gluck IV intptr_t GetLocation() {return (intptr_t)fData;} 42*9e195872SAlexander von Gluck IV 43745450adSAlexander von Gluck IV private: 445af067fbSAlexander von Gluck IV uint32 fQueueType; 45745450adSAlexander von Gluck IV 465af067fbSAlexander von Gluck IV unsigned char* fData; 475af067fbSAlexander von Gluck IV size_t fSize; 485af067fbSAlexander von Gluck IV size_t fWriteBytesAvail; 495af067fbSAlexander von Gluck IV int fReadPtr; 505af067fbSAlexander von Gluck IV int fWritePtr; 51745450adSAlexander von Gluck IV 525af067fbSAlexander von Gluck IV uint32 fAlignMask; 53745450adSAlexander von Gluck IV }; 54745450adSAlexander von Gluck IV 55745450adSAlexander von Gluck IV 56745450adSAlexander von Gluck IV #endif /* _RADEON_HD_RINGQUEUE_H */ 57