mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-07 22:48:30 +02:00
Add support for indirect buffers. Clean up the way vertex and indirect
buffes are handled.
The way buffers are acquired will probably be changed back to what it was
originally, using the DRM_DMA-style ioctl. Texture uploads should grab
as many buffers as needed in a single ioctl.
This commit is contained in:
parent
3c8b613ae2
commit
a553ebcd12
7 changed files with 28 additions and 36 deletions
|
|
@ -24,8 +24,10 @@
|
|||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Authors:
|
||||
* Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -35,7 +37,7 @@
|
|||
|
||||
#define R128_NAME "r128"
|
||||
#define R128_DESC "ATI Rage 128"
|
||||
#define R128_DATE "20001015"
|
||||
#define R128_DATE "20001016"
|
||||
#define R128_MAJOR 1
|
||||
#define R128_MINOR 1
|
||||
#define R128_PATCHLEVEL 0
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ int r128_mapbufs(struct inode *inode, struct file *filp, unsigned int cmd,
|
|||
if (dma->flags & _DRM_DMA_USE_AGP) {
|
||||
drm_map_t *map;
|
||||
|
||||
map = dev_priv->vertex_buffers;
|
||||
map = dev_priv->buffers;
|
||||
if (!map) {
|
||||
retcode = -EINVAL;
|
||||
goto done;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@
|
|||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Kevin E. Martin <martin@valinux.com>
|
||||
* Authors:
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -129,12 +130,6 @@ static void r128_status(drm_device_t *dev)
|
|||
}
|
||||
|
||||
|
||||
/* ================================================================
|
||||
* GH: Done from here down
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* ================================================================
|
||||
* Engine, FIFO control
|
||||
*/
|
||||
|
|
@ -458,14 +453,9 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
|
|||
|
||||
DO_FIND_MAP( dev_priv->fb, init->fb_offset );
|
||||
DO_FIND_MAP( dev_priv->mmio, init->mmio_offset );
|
||||
|
||||
DO_FIND_MAP( dev_priv->cce_ring, init->ring_offset );
|
||||
DO_FIND_MAP( dev_priv->ring_rptr, init->ring_rptr_offset );
|
||||
|
||||
DO_FIND_MAP( dev_priv->vertex_buffers,
|
||||
init->vertex_buffers_offset );
|
||||
DO_FIND_MAP( dev_priv->indirect_buffers,
|
||||
init->indirect_buffers_offset );
|
||||
DO_FIND_MAP( dev_priv->buffers, init->buffers_offset );
|
||||
|
||||
if ( !dev_priv->is_pci ) {
|
||||
DO_FIND_MAP( dev_priv->agp_textures,
|
||||
|
|
@ -478,8 +468,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
|
|||
|
||||
DO_REMAP( dev_priv->cce_ring );
|
||||
DO_REMAP( dev_priv->ring_rptr );
|
||||
DO_REMAP( dev_priv->vertex_buffers );
|
||||
DO_REMAP( dev_priv->indirect_buffers );
|
||||
DO_REMAP( dev_priv->buffers );
|
||||
#if 0
|
||||
if ( !dev_priv->is_pci ) {
|
||||
DO_REMAP( dev_priv->agp_textures );
|
||||
|
|
@ -518,8 +507,7 @@ static int r128_do_cleanup_cce( drm_device_t *dev )
|
|||
|
||||
DO_REMAPFREE( dev_priv->cce_ring );
|
||||
DO_REMAPFREE( dev_priv->ring_rptr );
|
||||
DO_REMAPFREE( dev_priv->vertex_buffers );
|
||||
DO_REMAPFREE( dev_priv->indirect_buffers );
|
||||
DO_REMAPFREE( dev_priv->buffers );
|
||||
#if 0
|
||||
if ( !dev_priv->is_pci ) {
|
||||
DO_REMAPFREE( dev_priv->agp_textures );
|
||||
|
|
@ -682,7 +670,6 @@ int r128_engine_reset( struct inode *inode, struct file *filp,
|
|||
/* ================================================================
|
||||
* Freelist management
|
||||
*/
|
||||
#if 0
|
||||
#define R128_BUFFER_USED 0xffffffff
|
||||
#define R128_BUFFER_FREE 0
|
||||
|
||||
|
|
@ -731,7 +718,6 @@ static int r128_freelist_init( drm_device_t *dev )
|
|||
return 0;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
drm_buf_t *r128_freelist_get( drm_device_t *dev )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@
|
|||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Kevin E. Martin <martin@valinux.com>
|
||||
* Authors:
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -179,8 +181,7 @@ typedef struct drm_r128_init {
|
|||
unsigned int mmio_offset;
|
||||
unsigned int ring_offset;
|
||||
unsigned int ring_rptr_offset;
|
||||
unsigned int vertex_buffers_offset;
|
||||
unsigned int indirect_buffers_offset;
|
||||
unsigned int buffers_offset;
|
||||
unsigned int agp_textures_offset;
|
||||
} drm_r128_init_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,8 +24,10 @@
|
|||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Authors:
|
||||
* Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -35,7 +37,7 @@
|
|||
|
||||
#define R128_NAME "r128"
|
||||
#define R128_DESC "ATI Rage 128"
|
||||
#define R128_DATE "20001015"
|
||||
#define R128_DATE "20001016"
|
||||
#define R128_MAJOR 1
|
||||
#define R128_MINOR 1
|
||||
#define R128_PATCHLEVEL 0
|
||||
|
|
|
|||
|
|
@ -24,8 +24,10 @@
|
|||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Authors:
|
||||
* Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -87,8 +89,7 @@ typedef struct drm_r128_private {
|
|||
drm_map_t *mmio;
|
||||
drm_map_t *cce_ring;
|
||||
drm_map_t *ring_rptr;
|
||||
drm_map_t *vertex_buffers;
|
||||
drm_map_t *indirect_buffers;
|
||||
drm_map_t *buffers;
|
||||
drm_map_t *agp_textures;
|
||||
} drm_r128_private_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,8 @@
|
|||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Gareth Hughes <gareth@valinux.com>
|
||||
* Authors:
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -504,8 +505,7 @@ static void r128_cce_dispatch_vertex( drm_device_t *dev,
|
|||
int vertsize = sarea_priv->vertsize;
|
||||
int format = sarea_priv->vc_format;
|
||||
int index = buf->idx;
|
||||
int offset = dev_priv->vertex_buffers->offset
|
||||
+ buf->offset - dev->agp->base;
|
||||
int offset = dev_priv->buffers->offset + buf->offset - dev->agp->base;
|
||||
int size = buf->used / (vertsize * sizeof(u32));
|
||||
int prim;
|
||||
int i = 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue