提交 5d93b135 编写于 作者: A Alex Deucher 提交者: Dave Airlie

drm/radeon/r600: fix legacy blit code

ARRAY_SIZE is number of elements not bytes.  Fix
ring counts accordingly, also make a few functions
static.
Signed-off-by: NAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: NDave Airlie <airlied@redhat.com>
上级 cecc6b63
...@@ -126,7 +126,7 @@ set_shaders(struct drm_device *dev) ...@@ -126,7 +126,7 @@ set_shaders(struct drm_device *dev)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
u64 gpu_addr; u64 gpu_addr;
int shader_size, i; int i;
u32 *vs, *ps; u32 *vs, *ps;
uint32_t sq_pgm_resources; uint32_t sq_pgm_resources;
RING_LOCALS; RING_LOCALS;
...@@ -136,11 +136,9 @@ set_shaders(struct drm_device *dev) ...@@ -136,11 +136,9 @@ set_shaders(struct drm_device *dev)
vs = (u32 *) ((char *)dev->agp_buffer_map->handle + dev_priv->blit_vb->offset); vs = (u32 *) ((char *)dev->agp_buffer_map->handle + dev_priv->blit_vb->offset);
ps = (u32 *) ((char *)dev->agp_buffer_map->handle + dev_priv->blit_vb->offset + 256); ps = (u32 *) ((char *)dev->agp_buffer_map->handle + dev_priv->blit_vb->offset + 256);
shader_size = r6xx_vs_size; for (i = 0; i < r6xx_vs_size; i++)
for (i = 0; i < shader_size; i++)
vs[i] = r6xx_vs[i]; vs[i] = r6xx_vs[i];
shader_size = r6xx_ps_size; for (i = 0; i < r6xx_ps_size; i++)
for (i = 0; i < shader_size; i++)
ps[i] = r6xx_ps[i]; ps[i] = r6xx_ps[i];
dev_priv->blit_vb->used = 512; dev_priv->blit_vb->used = 512;
...@@ -309,7 +307,7 @@ draw_auto(drm_radeon_private_t *dev_priv) ...@@ -309,7 +307,7 @@ draw_auto(drm_radeon_private_t *dev_priv)
static inline void static inline void
set_default_state(drm_radeon_private_t *dev_priv) set_default_state(drm_radeon_private_t *dev_priv)
{ {
int default_state_dw, i; int i;
u32 sq_config, sq_gpr_resource_mgmt_1, sq_gpr_resource_mgmt_2; u32 sq_config, sq_gpr_resource_mgmt_1, sq_gpr_resource_mgmt_2;
u32 sq_thread_resource_mgmt, sq_stack_resource_mgmt_1, sq_stack_resource_mgmt_2; u32 sq_thread_resource_mgmt, sq_stack_resource_mgmt_1, sq_stack_resource_mgmt_2;
int num_ps_gprs, num_vs_gprs, num_temp_gprs, num_gs_gprs, num_es_gprs; int num_ps_gprs, num_vs_gprs, num_temp_gprs, num_gs_gprs, num_es_gprs;
...@@ -462,14 +460,12 @@ set_default_state(drm_radeon_private_t *dev_priv) ...@@ -462,14 +460,12 @@ set_default_state(drm_radeon_private_t *dev_priv)
R600_NUM_ES_STACK_ENTRIES(num_es_stack_entries)); R600_NUM_ES_STACK_ENTRIES(num_es_stack_entries));
if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV770) { if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV770) {
default_state_dw = r7xx_default_size * 4; BEGIN_RING(r7xx_default_size + 10);
BEGIN_RING(default_state_dw + 10); for (i = 0; i < r7xx_default_size; i++)
for (i = 0; i < default_state_dw; i++)
OUT_RING(r7xx_default_state[i]); OUT_RING(r7xx_default_state[i]);
} else { } else {
default_state_dw = r6xx_default_size * 4; BEGIN_RING(r6xx_default_size + 10);
BEGIN_RING(default_state_dw + 10); for (i = 0; i < r6xx_default_size; i++)
for (i = 0; i < default_state_dw; i++)
OUT_RING(r6xx_default_state[i]); OUT_RING(r6xx_default_state[i]);
} }
OUT_RING(CP_PACKET3(R600_IT_EVENT_WRITE, 0)); OUT_RING(CP_PACKET3(R600_IT_EVENT_WRITE, 0));
...@@ -512,7 +508,7 @@ static inline uint32_t i2f(uint32_t input) ...@@ -512,7 +508,7 @@ static inline uint32_t i2f(uint32_t input)
} }
int r600_nomm_get_vb(struct drm_device *dev) static inline int r600_nomm_get_vb(struct drm_device *dev)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
dev_priv->blit_vb = radeon_freelist_get(dev); dev_priv->blit_vb = radeon_freelist_get(dev);
...@@ -523,7 +519,7 @@ int r600_nomm_get_vb(struct drm_device *dev) ...@@ -523,7 +519,7 @@ int r600_nomm_get_vb(struct drm_device *dev)
return 0; return 0;
} }
void r600_nomm_put_vb(struct drm_device *dev) static inline void r600_nomm_put_vb(struct drm_device *dev)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
...@@ -531,7 +527,7 @@ void r600_nomm_put_vb(struct drm_device *dev) ...@@ -531,7 +527,7 @@ void r600_nomm_put_vb(struct drm_device *dev)
radeon_cp_discard_buffer(dev, dev_priv->blit_vb->file_priv->master, dev_priv->blit_vb); radeon_cp_discard_buffer(dev, dev_priv->blit_vb->file_priv->master, dev_priv->blit_vb);
} }
void *r600_nomm_get_vb_ptr(struct drm_device *dev) static inline void *r600_nomm_get_vb_ptr(struct drm_device *dev)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
return (((char *)dev->agp_buffer_map->handle + return (((char *)dev->agp_buffer_map->handle +
...@@ -781,8 +777,7 @@ r600_blit_swap(struct drm_device *dev, ...@@ -781,8 +777,7 @@ r600_blit_swap(struct drm_device *dev,
u64 vb_addr; u64 vb_addr;
u32 *vb; u32 *vb;
vb = (u32 *) ((char *)dev->agp_buffer_map->handle + vb = r600_nomm_get_vb_ptr(dev);
dev_priv->blit_vb->offset + dev_priv->blit_vb->used);
if ((dev_priv->blit_vb->used + 48) > dev_priv->blit_vb->total) { if ((dev_priv->blit_vb->used + 48) > dev_priv->blit_vb->total) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册