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:
parent
9e67b0a174
commit
60041203d5
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue