Commit f07b2c83 authored by Keith Whitwell's avatar Keith Whitwell

r300: convert to pipe_resources

Do a very shallow conversion - basically keeping the existing
buffer and texture code intact and using a vtbl struct
inside our resource struct to select between the two implementations.

The buffer and texture treatments could be further merged without
much effort, but try to keep the existing code working at this point.
parent feca9c3c
......@@ -13,6 +13,7 @@ C_SOURCES = \
r300_fs.c \
r300_query.c \
r300_render.c \
r300_resource.c \
r300_screen.c \
r300_screen_buffer.c \
r300_state.c \
......
......@@ -35,7 +35,6 @@
#include "r300_screen.h"
#include "r300_state_invariant.h"
#include "r300_texture.h"
#include "r300_transfer.h"
#include "radeon_winsys.h"
......@@ -48,7 +47,7 @@ static void r300_destroy_context(struct pipe_context* context)
draw_destroy(r300->draw);
/* Free the OQ BO. */
context->screen->buffer_destroy(r300->oqbo);
context->screen->resource_destroy(context->screen, r300->oqbo);
/* If there are any queries pending or not destroyed, remove them now. */
foreach_s(query, temp, &r300->query_list) {
......@@ -71,17 +70,11 @@ static void r300_destroy_context(struct pipe_context* context)
FREE(r300);
}
static unsigned int
r300_is_texture_referenced(struct pipe_context *pipe,
struct pipe_texture *texture,
unsigned face, unsigned level)
{
return 0;
}
static unsigned int
r300_is_buffer_referenced(struct pipe_context *pipe,
struct pipe_buffer *buf)
r300_is_resource_referenced(struct pipe_context *pipe,
struct pipe_resource *buf,
unsigned face, unsigned level)
{
/* This only checks to see whether actual hardware buffers are
* referenced. Since we use managed BOs and transfers, it's actually not
......@@ -89,11 +82,6 @@ r300_is_buffer_referenced(struct pipe_context *pipe,
* buffers are never referenced.
*/
/* XXX: that doesn't make sense given that
* r300_is_texture_referenced is implemented on top of this
* function and hardware can certainly refer to textures
* directly...
*/
return 0;
}
......@@ -197,13 +185,12 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
draw_set_viewport_state(r300->draw, &r300_viewport_identity);
}
r300->context.is_texture_referenced = r300_is_texture_referenced;
r300->context.is_buffer_referenced = r300_is_buffer_referenced;
r300->context.is_resource_referenced = r300_is_resource_referenced;
r300_setup_atoms(r300);
/* Open up the OQ BO. */
r300->oqbo = screen->buffer_create(screen, 4096,
r300->oqbo = pipe_buffer_create(screen, 4096,
PIPE_BUFFER_USAGE_VERTEX, 4096);
make_empty_list(&r300->query_list);
......@@ -211,8 +198,6 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
r300_init_query_functions(r300);
r300_init_transfer_functions(r300);
r300_init_state_functions(r300);
r300->invariant_state.dirty = TRUE;
......@@ -222,14 +207,14 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
r300->blitter = util_blitter_create(&r300->context);
r300->upload_ib = u_upload_create(screen,
r300->upload_ib = u_upload_create(&r300->context,
32 * 1024, 16,
PIPE_BUFFER_USAGE_INDEX);
if (r300->upload_ib == NULL)
goto no_upload_ib;
r300->upload_vb = u_upload_create(screen,
r300->upload_vb = u_upload_create(&r300->context,
128 * 1024, 16,
PIPE_BUFFER_USAGE_VERTEX);
if (r300->upload_vb == NULL)
......
......@@ -29,6 +29,7 @@
#include "pipe/p_context.h"
#include "util/u_inlines.h"
#include "util/u_transfer.h"
#include "r300_screen.h"
......@@ -236,7 +237,7 @@ enum r300_buffer_tiling {
struct r300_texture {
/* Parent class */
struct pipe_texture tex;
struct u_resource b;
/* Offsets into the buffer. */
unsigned offset[R300_MAX_TEXTURE_LEVELS];
......@@ -310,12 +311,12 @@ struct r300_context {
struct blitter_context* blitter;
/* Vertex buffer for rendering. */
struct pipe_buffer* vbo;
struct pipe_resource* vbo;
/* Offset into the VBO. */
size_t vbo_offset;
/* Occlusion query buffer. */
struct pipe_buffer* oqbo;
struct pipe_resource* oqbo;
/* Query list. */
struct r300_query *query_current;
struct r300_query query_list;
......@@ -408,8 +409,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
/* Context initialization. */
struct draw_stage* r300_draw_stage(struct r300_context* r300);
void r300_init_state_functions(struct r300_context* r300);
void r300_init_surface_functions(struct r300_context* r300);
void r300_init_tex_functions( struct pipe_context *pipe );
void r300_init_resource_functions(struct r300_context* r300);
static INLINE boolean CTX_DBG_ON(struct r300_context * ctx, unsigned flags)
{
......
......@@ -151,7 +151,7 @@ static const float * get_shader_constant(
struct r300_textures_state* texstate =
(struct r300_textures_state*)r300->textures_state.state;
static float vec[4] = { 0.0, 0.0, 0.0, 1.0 };
struct pipe_texture *tex;
struct pipe_resource *tex;
switch(constant->Type) {
case RC_CONSTANT_EXTERNAL:
......@@ -999,7 +999,7 @@ void r300_emit_texture_cache_inval(struct r300_context* r300, unsigned size, voi
void r300_emit_buffer_validate(struct r300_context *r300,
boolean do_validate_vertex_buffers,
struct pipe_buffer *index_buffer)
struct pipe_resource *index_buffer)
{
struct pipe_framebuffer_state* fb =
(struct pipe_framebuffer_state*)r300->fb_state.state;
......@@ -1008,7 +1008,7 @@ void r300_emit_buffer_validate(struct r300_context *r300,
struct r300_texture* tex;
struct pipe_vertex_buffer *vbuf = r300->vertex_buffer;
struct pipe_vertex_element *velem = r300->velems->velem;
struct pipe_buffer *pbuf;
struct pipe_resource *pbuf;
unsigned i;
boolean invalid = FALSE;
......
......@@ -102,6 +102,6 @@ void r300_emit_dirty_state(struct r300_context* r300);
void r300_emit_buffer_validate(struct r300_context *r300,
boolean do_validate_vertex_buffers,
struct pipe_buffer *index_buffer);
struct pipe_resource *index_buffer);
#endif /* R300_EMIT_H */
......@@ -76,17 +76,17 @@ static void r300_destroy_query(struct pipe_context* pipe,
static void r300_begin_query(struct pipe_context* pipe,
struct pipe_query* query)
{
uint32_t* map;
uint32_t value = ~0U;
struct r300_context* r300 = r300_context(pipe);
struct r300_query* q = (struct r300_query*)query;
assert(r300->query_current == NULL);
map = pipe->screen->buffer_map(pipe->screen, r300->oqbo,
PIPE_BUFFER_USAGE_CPU_WRITE);
map += q->offset / 4;
*map = ~0U;
pipe->screen->buffer_unmap(pipe->screen, r300->oqbo);
pipe_buffer_write(pipe,
r300->oqbo,
q->offset,
sizeof value,
&value);
q->flushed = FALSE;
r300->query_current = q;
......@@ -110,6 +110,7 @@ static boolean r300_get_query_result(struct pipe_context* pipe,
struct r300_context* r300 = r300_context(pipe);
struct r300_screen* r300screen = r300_screen(r300->context.screen);
struct r300_query *q = (struct r300_query*)query;
struct pipe_transfer *transfer;
unsigned flags = PIPE_BUFFER_USAGE_CPU_READ;
uint32_t* map;
uint32_t temp = 0;
......@@ -118,10 +119,10 @@ static boolean r300_get_query_result(struct pipe_context* pipe,
if (q->flushed == FALSE)
pipe->flush(pipe, 0, NULL);
if (!wait) {
flags |= PIPE_BUFFER_USAGE_DONTBLOCK;
flags |= PIPE_TRANSFER_DONTBLOCK;
}
map = pipe->screen->buffer_map(pipe->screen, r300->oqbo, flags);
map = pipe_buffer_map(pipe, r300->oqbo, flags, &transfer);
if (!map)
return FALSE;
map += q->offset / 4;
......@@ -144,7 +145,7 @@ static boolean r300_get_query_result(struct pipe_context* pipe,
temp += *map;
map++;
}
pipe->screen->buffer_unmap(pipe->screen, r300->oqbo);
pipe_buffer_unmap(pipe, r300->oqbo, transfer);
if (temp == ~0U) {
/* Our results haven't been written yet... */
......
This diff is collapsed.
......@@ -26,7 +26,7 @@
uint32_t r300_translate_primitive(unsigned prim);
void r300_draw_range_elements(struct pipe_context* pipe,
struct pipe_buffer* indexBuffer,
struct pipe_resource* indexBuffer,
unsigned indexSize,
unsigned minIndex,
unsigned maxIndex,
......@@ -35,7 +35,7 @@ void r300_draw_range_elements(struct pipe_context* pipe,
unsigned count);
void r300_draw_elements(struct pipe_context* pipe,
struct pipe_buffer* indexBuffer,
struct pipe_resource* indexBuffer,
unsigned indexSize, unsigned mode,
unsigned start, unsigned count);
......@@ -48,7 +48,7 @@ void r300_swtcl_draw_arrays(struct pipe_context* pipe,
unsigned count);
void r300_swtcl_draw_range_elements(struct pipe_context* pipe,
struct pipe_buffer* indexBuffer,
struct pipe_resource* indexBuffer,
unsigned indexSize,
unsigned minIndex,
unsigned maxIndex,
......
/*
* Copyright 2010 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* on the rights to use, copy, modify, merge, publish, distribute, sub
* license, and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Dave Airlie
*/
#include <stdio.h>
#include "util/u_inlines.h"
#include "util/u_format.h"
#include "util/u_memory.h"
#include "util/u_upload_mgr.h"
#include "util/u_math.h"
#include "r300_context.h"
#include "r300_texture.h"
#include "r300_transfer.h"
#include "r300_screen.h"
#include "r300_state_inlines.h"
#include "r300_screen_buffer.h"
#include "r300_winsys.h"
static struct pipe_resource *
r300_resource_create(struct pipe_screen *screen,
const struct pipe_resource *template)
{
if (template->target == PIPE_BUFFER)
return r300_buffer_create(screen, template);
else
return r300_resource_create(screen, template);
}
static struct pipe_resource *
r300_resource_from_handle(struct pipe_screen * screen,
const struct pipe_resource *template,
struct winsys_handle *whandle)
{
if (template->target == PIPE_BUFFER)
return NULL;
else
return r300_texture_from_handle(screen, template, whandle);
}
void
r300_init_resource_functions(struct r300_context *r300)
{
r300->context.get_transfer = u_get_transfer_vtbl;
r300->context.transfer_map = u_transfer_map_vtbl;
r300->context.transfer_flush_region = u_transfer_flush_region_vtbl;
r300->context.transfer_unmap = u_transfer_unmap_vtbl;
r300->context.transfer_destroy = u_transfer_destroy_vtbl;
r300->context.transfer_inline_write = u_transfer_inline_write_vtbl;
}
void
r300_init_screen_resource_functions(struct r300_screen *r300screen)
{
r300screen->screen.resource_create = r300_resource_create;
r300screen->screen.resource_from_handle = r300_resource_from_handle;
r300screen->screen.resource_get_handle = u_resource_get_handle_vtbl;
r300screen->screen.resource_destroy = u_resource_destroy_vtbl;
r300screen->screen.user_buffer_create = r300_user_buffer_create;
r300screen->screen.get_tex_surface = r300_get_tex_surface;
r300screen->screen.tex_surface_destroy = r300_tex_surface_destroy;
r300screen->screen.video_surface_create = r300_video_surface_create;
r300screen->screen.video_surface_destroy = r300_video_surface_destroy;
}
......@@ -292,9 +292,8 @@ struct pipe_screen* r300_create_screen(struct r300_winsys_screen *rws)
r300screen->screen.is_format_supported = r300_is_format_supported;
r300screen->screen.context_create = r300_create_context;
r300_init_screen_texture_functions(&r300screen->screen);
r300_init_screen_resource_functions(r300screen);
r300_screen_init_buffer_functions(r300screen);
return &r300screen->screen;
}
......
......@@ -91,5 +91,7 @@ static INLINE void SCREEN_DBG(struct r300_screen * screen, unsigned flags,
void r300_init_debug(struct r300_screen* ctx);
void r300_init_screen_resource_functions(struct r300_screen *r300screen);
#endif /* R300_SCREEN_H */
......@@ -3,6 +3,7 @@
#include <stdio.h>
#include "pipe/p_compiler.h"
#include "pipe/p_state.h"
#include "util/u_transfer.h"
#include "r300_screen.h"
#include "r300_winsys.h"
......@@ -18,7 +19,7 @@ struct r300_buffer_range {
struct r300_buffer
{
struct pipe_buffer base;
struct u_resource b;
uint32_t magic;
......@@ -32,7 +33,7 @@ struct r300_buffer
};
static INLINE struct r300_buffer *
r300_buffer(struct pipe_buffer *buffer)
r300_buffer(struct pipe_resource *buffer)
{
if (buffer) {
assert(((struct r300_buffer *)buffer)->magic == R300_BUFFER_MAGIC);
......@@ -42,13 +43,13 @@ r300_buffer(struct pipe_buffer *buffer)
}
static INLINE boolean
r300_buffer_is_user_buffer(struct pipe_buffer *buffer)
r300_buffer_is_user_buffer(struct pipe_resource *buffer)
{
return r300_buffer(buffer)->user_buffer ? true : false;
}
static INLINE boolean r300_add_buffer(struct r300_winsys_screen *rws,
struct pipe_buffer *buffer,
struct pipe_resource *buffer,
int rd, int wr)
{
struct r300_buffer *buf = r300_buffer(buffer);
......@@ -67,7 +68,6 @@ static INLINE boolean r300_add_texture(struct r300_winsys_screen *rws,
return rws->add_buffer(rws, tex->buffer, rd, wr);
}
void r300_screen_init_buffer_functions(struct r300_screen *r300screen);
static INLINE void r300_buffer_write_reloc(struct r300_winsys_screen *rws,
struct r300_buffer *buf,
......@@ -89,11 +89,18 @@ static INLINE void r300_texture_write_reloc(struct r300_winsys_screen *rws,
int r300_upload_user_buffers(struct r300_context *r300);
int r300_upload_index_buffer(struct r300_context *r300,
struct pipe_buffer **index_buffer,
struct pipe_resource **index_buffer,
unsigned index_size,
unsigned start,
unsigned count);
boolean r300_buffer_is_referenced(struct r300_context *r300,
struct pipe_buffer *buf);
struct pipe_resource *r300_buffer_create(struct pipe_screen *screen,
const struct pipe_resource *template);
struct pipe_resource *r300_user_buffer_create(struct pipe_screen *screen,
void *ptr,
unsigned bytes,
unsigned usage);
#endif
......@@ -986,7 +986,7 @@ static void r300_set_fragment_sampler_views(struct pipe_context* pipe,
static struct pipe_sampler_view *
r300_create_sampler_view(struct pipe_context *pipe,
struct pipe_texture *texture,
struct pipe_resource *texture,
const struct pipe_sampler_view *templ)
{
struct pipe_sampler_view *view = CALLOC_STRUCT(pipe_sampler_view);
......@@ -995,7 +995,7 @@ r300_create_sampler_view(struct pipe_context *pipe,
*view = *templ;
view->reference.count = 1;
view->texture = NULL;
pipe_texture_reference(&view->texture, texture);
pipe_resource_reference(&view->texture, texture);
view->context = pipe;
}
......@@ -1007,7 +1007,7 @@ static void
r300_sampler_view_destroy(struct pipe_context *pipe,
struct pipe_sampler_view *view)
{
pipe_texture_reference(&view->texture, NULL);
pipe_resource_reference(&view->texture, NULL);
FREE(view);
}
......@@ -1081,14 +1081,14 @@ static void r300_set_vertex_buffers(struct pipe_context* pipe,
return;
for (i = 0; i < count; i++) {
pipe_buffer_reference(&r300->vertex_buffer[i].buffer, buffers[i].buffer);
pipe_resource_reference(&r300->vertex_buffer[i].buffer, buffers[i].buffer);
if (r300_buffer_is_user_buffer(buffers[i].buffer))
any_user_buffer = true;
max_index = MIN2(buffers[i].max_index, max_index);
}
for ( ; i < r300->vertex_buffer_count; i++)
pipe_buffer_reference(&r300->vertex_buffer[i].buffer, NULL);
pipe_resource_reference(&r300->vertex_buffer[i].buffer, NULL);
memcpy(r300->vertex_buffer, buffers,
sizeof(struct pipe_vertex_buffer) * count);
......@@ -1413,21 +1413,22 @@ static void r300_delete_vs_state(struct pipe_context* pipe, void* shader)
static void r300_set_constant_buffer(struct pipe_context *pipe,
uint shader, uint index,
struct pipe_buffer *buf)
struct pipe_resource *buf)
{
struct r300_context* r300 = r300_context(pipe);
struct r300_screen *r300screen = r300_screen(pipe->screen);
struct pipe_transfer *tr;
void *mapped;
int max_size = 0;
if (buf == NULL || buf->size == 0 ||
(mapped = pipe_buffer_map(pipe->screen, buf, PIPE_BUFFER_USAGE_CPU_READ)) == NULL)
if (buf == NULL || buf->width0 == 0 ||
(mapped = pipe_buffer_map(pipe, buf, PIPE_BUFFER_USAGE_CPU_READ, &tr)) == NULL)
{
r300->shader_constants[shader].count = 0;
return;
}
assert((buf->size % 4 * sizeof(float)) == 0);
assert((buf->width0 % 4 * sizeof(float)) == 0);
/* Check the size of the constant buffer. */
switch (shader) {
......@@ -1449,15 +1450,15 @@ static void r300_set_constant_buffer(struct pipe_context *pipe,
}
/* XXX Subtract immediates and RC_STATE_* variables. */
if (buf->size > (sizeof(float) * 4 * max_size)) {
if (buf->width0 > (sizeof(float) * 4 * max_size)) {
debug_printf("r300: Max size of the constant buffer is "
"%i*4 floats.\n", max_size);
abort();
}
memcpy(r300->shader_constants[shader].constants, mapped, buf->size);
r300->shader_constants[shader].count = buf->size / (4 * sizeof(float));
pipe_buffer_unmap(pipe->screen, buf);
memcpy(r300->shader_constants[shader].constants, mapped, buf->width0);
r300->shader_constants[shader].count = buf->width0 / (4 * sizeof(float));
pipe_buffer_unmap(pipe, buf, tr);
if (shader == PIPE_SHADER_VERTEX) {
if (r300screen->caps->has_tcl) {
......
......@@ -355,7 +355,7 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
R300_TXO_MICRO_TILE(tex->microtile);
/* to emulate 1D textures through 2D ones correctly */
if (tex->tex.target == PIPE_TEXTURE_1D) {
if (tex->b.b.target == PIPE_TEXTURE_1D) {
texstate->filter[0] &= ~R300_TX_WRAP_T_MASK;
texstate->filter[0] |= R300_TX_WRAP_T(R300_TX_CLAMP_TO_EDGE);
}
......@@ -367,7 +367,7 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
} else {
/* determine min/max levels */
/* the MAX_MIP level is the largest (finest) one */
max_level = MIN2(sampler->max_lod, tex->tex.last_level);
max_level = MIN2(sampler->max_lod, tex->b.b.last_level);
min_level = MIN2(sampler->min_lod, max_level);
texstate->format[0] |= R300_TX_NUM_LEVELS(max_level);
texstate->filter[0] |= R300_TX_MAX_MIP_LEVEL(min_level);
......
This diff is collapsed.
......@@ -30,8 +30,6 @@
struct r300_texture;
void r300_init_screen_texture_functions(struct pipe_screen* screen);
unsigned r300_texture_get_stride(struct r300_screen* screen,
struct r300_texture* tex, unsigned level);
......@@ -39,7 +37,7 @@ unsigned r300_texture_get_offset(struct r300_texture* tex, unsigned level,
unsigned zslice, unsigned face);
void r300_texture_reinterpret_format(struct pipe_screen *screen,
struct pipe_texture *tex,
struct pipe_resource *tex,
enum pipe_format new_format);
boolean r300_is_colorbuffer_format_supported(enum pipe_format format);
......@@ -51,7 +49,7 @@ boolean r300_is_sampler_format_supported(enum pipe_format format);
struct r300_video_surface
{
struct pipe_video_surface base;
struct pipe_texture *tex;
struct pipe_resource *tex;
};
static INLINE struct r300_video_surface *
......@@ -60,11 +58,32 @@ r300_video_surface(struct pipe_video_surface *pvs)
return (struct r300_video_surface *)pvs;
}
/* Used internally for texture_is_referenced()
*/
boolean r300_get_texture_buffer(struct pipe_screen* screen,
struct pipe_texture *texture,
struct r300_winsys_buffer** buffer,
unsigned* stride);
struct pipe_resource*
r300_texture_from_handle(struct pipe_screen* screen,
const struct pipe_resource* base,
struct winsys_handle *whandle);
struct pipe_resource*
r300_texture_create(struct pipe_screen* screen,
const struct pipe_resource* template);
struct pipe_video_surface *
r300_video_surface_create(struct pipe_screen *screen,
enum pipe_video_chroma_format chroma_format,
unsigned width, unsigned height);
void r300_video_surface_destroy(struct pipe_video_surface *vsfc);
struct pipe_surface* r300_get_tex_surface(struct pipe_screen* screen,
struct pipe_resource* texture,
unsigned face,
unsigned level,
unsigned zslice,
unsigned flags);
void r300_tex_surface_destroy(struct pipe_surface* s);
#endif /* R300_TEXTURE_H */
This diff is collapsed.
......@@ -28,6 +28,24 @@
struct r300_context;
void r300_init_transfer_functions(struct r300_context *r300ctx);
struct pipe_transfer*
r300_texture_get_transfer(struct pipe_context *ctx,
struct pipe_resource *texture,
struct pipe_subresource sr,
unsigned usage,
const struct pipe_box *box);
void
r300_texture_transfer_destroy(struct pipe_context *ctx,
struct pipe_transfer *trans);
void*
r300_texture_transfer_map(struct pipe_context *ctx,
struct pipe_transfer *transfer);
void
r300_texture_transfer_unmap(struct pipe_context *ctx,
struct pipe_transfer *transfer);
#endif
......@@ -38,11 +38,6 @@ struct pipe_screen* r300_create_screen(struct r300_winsys_screen *rws);
struct r300_winsys_buffer;
boolean r300_get_texture_buffer(struct pipe_screen* screen,
struct pipe_texture* texture,
struct r300_winsys_buffer** buffer,
unsigned *stride);
enum r300_value_id {
R300_VID_PCI_ID,
R300_VID_GB_PIPES,
......@@ -99,7 +94,7 @@ struct r300_winsys_screen {
unsigned offset,
unsigned length);
/* Add a pipe_buffer to the list of buffer objects to validate. */
/* Add a pipe_resource to the list of buffer objects to validate. */
boolean (*add_buffer)(struct r300_winsys_screen *winsys,
struct r300_winsys_buffer *buf,
uint32_t rd,
......@@ -163,7 +158,7 @@ struct r300_winsys_screen {
unsigned stride,
struct winsys_handle *whandle);
boolean (*is_buffer_referenced)(struct r300_winsys_screen *winsys,
boolean (*is_resource_referenced)(struct r300_winsys_screen *winsys,
struct r300_winsys_buffer *buffer);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment