r300-gallium, radeon-gallium: Continue migration to DRI2 state_tracker, part 2.

Almost there. glxinfo still works, and AFAICT so does trivial/clear.
This commit is contained in:
Corbin Simpson 2009-03-03 22:11:56 -08:00
parent 9e67b0a174
commit 60041203d5
4 changed files with 45 additions and 3 deletions

View File

@ -186,3 +186,21 @@ void r300_init_screen_texture_functions(struct pipe_screen* screen)
screen->tex_surface_release = r300_tex_surface_release;
screen->texture_blanket = r300_texture_blanket;
}
boolean r300_get_texture_buffer(struct pipe_texture* texture,
struct pipe_buffer** buffer,
unsigned* stride)
{
struct r300_texture* tex = (struct r300_texture*)texture;
if (!tex) {
return FALSE;
}
pipe_buffer_reference(texture->screen, buffer, tex->buffer);
if (stride) {
*stride = tex->stride;
}
return TRUE;
}

View File

@ -31,4 +31,12 @@
void r300_init_screen_texture_functions(struct pipe_screen* screen);
#ifndef R300_WINSYS_H
boolean r300_get_texture_buffer(struct pipe_texture* texture,
struct pipe_buffer** buffer,
unsigned* stride);
#endif /* R300_WINSYS_H */
#endif /* R300_TEXTURE_H */

View File

@ -92,4 +92,8 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
}
#endif
boolean r300_get_texture_buffer(struct pipe_texture* texture,
struct pipe_buffer** buffer,
unsigned* stride);
#endif /* R300_WINSYS_H */

View File

@ -59,6 +59,7 @@ boolean radeon_buffer_from_texture(struct pipe_texture* texture,
struct pipe_buffer** buffer,
unsigned* stride)
{
return FALSE;
}
/* Create a buffer from a handle. */
@ -67,7 +68,8 @@ struct pipe_buffer* radeon_buffer_from_handle(struct pipe_screen* screen,
const char* name,
unsigned handle)
{
struct radeon_bo_manager* bom = ((struct radeon_winsys*)screen->winsys)->bom;
struct radeon_bo_manager* bom =
((struct radeon_winsys*)screen->winsys)->bom;
struct radeon_pipe_buffer* radeon_buffer;
struct radeon_bo* bo = NULL;
@ -92,19 +94,29 @@ boolean radeon_handle_from_buffer(struct pipe_screen* screen,
struct pipe_buffer* buffer,
unsigned* handle)
{
struct radeon_pipe_buffer* radeon_buffer =
(struct radeon_pipe_buffer*)buffer;
*handle = radeon_buffer->bo->handle;
return TRUE;
}
boolean radeon_global_handle_from_buffer(struct pipe_screen* screen,
struct pipe_buffer* buffer,
unsigned* handle)
{
/* XXX WTF is the difference here? global? */
struct radeon_pipe_buffer* radeon_buffer =
(struct radeon_pipe_buffer*)buffer;
*handle = radeon_buffer->bo->handle;
return TRUE;
}
struct drm_api drm_api_hooks = {
.create_screen = radeon_create_screen,
.create_context = radeon_create_context,
.buffer_from_texture = radeon_buffer_from_texture,
/* XXX fix this */
.buffer_from_texture = r300_get_texture_buffer,
.buffer_from_handle = radeon_buffer_from_handle,
.handle_from_buffer = radeon_handle_from_buffer,
.global_handle_from_buffer = radeon_global_handle_from_buffer,
};
};