Mesa (main): mesa/st: merge st buffer object into GL
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Dec 15 14:02:49 UTC 2021
Module: Mesa
Branch: main
Commit: 970daedb1d5fd191eab0296db09fa05e94db9a05
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=970daedb1d5fd191eab0296db09fa05e94db9a05
Author: Dave Airlie <airlied at redhat.com>
Date: Thu Dec 9 11:37:58 2021 +1000
mesa/st: merge st buffer object into GL
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14133>
---
src/gallium/frontends/dri/dri2.c | 6 +-
src/mesa/main/mtypes.h | 21 +++++
src/mesa/state_tracker/st_atom_array.cpp | 2 +-
src/mesa/state_tracker/st_atom_atomicbuf.c | 3 +-
src/mesa/state_tracker/st_atom_image.c | 3 +-
src/mesa/state_tracker/st_atom_storagebuf.c | 4 +-
src/mesa/state_tracker/st_cb_bufferobjects.c | 119 +++++++++++-------------
src/mesa/state_tracker/st_cb_bufferobjects.h | 54 ++---------
src/mesa/state_tracker/st_cb_compute.c | 2 +-
src/mesa/state_tracker/st_cb_queryobj.c | 5 +-
src/mesa/state_tracker/st_cb_semaphoreobjects.c | 8 +-
src/mesa/state_tracker/st_cb_texture.c | 2 +-
src/mesa/state_tracker/st_cb_xformfb.c | 2 +-
src/mesa/state_tracker/st_draw.c | 8 +-
src/mesa/state_tracker/st_draw_feedback.c | 8 +-
src/mesa/state_tracker/st_pbo.c | 2 +-
src/mesa/state_tracker/st_sampler_view.c | 4 +-
17 files changed, 107 insertions(+), 146 deletions(-)
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 06857b66900..19f0e3f5715 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -1921,7 +1921,7 @@ dri2_interop_export_object(__DRIcontext *_ctx,
return MESA_GLINTEROP_INVALID_OBJECT;
}
- res = st_buffer_object(buf)->buffer;
+ res = buf->buffer;
if (!res) {
/* this shouldn't happen */
simple_mtx_unlock(&ctx->Shared->Mutex);
@@ -1999,8 +1999,8 @@ dri2_interop_export_object(__DRIcontext *_ctx,
}
if (target == GL_TEXTURE_BUFFER) {
- struct st_buffer_object *stBuf =
- st_buffer_object(obj->BufferObject);
+ struct gl_buffer_object *stBuf =
+ obj->BufferObject;
if (!stBuf || !stBuf->buffer) {
/* this shouldn't happen */
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 3473c3aaa86..3625a1c1029 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -55,6 +55,7 @@
#include "util/mesa-sha1.h"
#include "vbo/vbo.h"
+#include "pipe/p_state.h"
#ifdef __cplusplus
extern "C" {
@@ -1397,6 +1398,26 @@ struct gl_buffer_object
bool MinMaxCacheDirty;
bool HandleAllocated; /**< GL_ARB_bindless_texture */
+
+ struct pipe_resource *buffer;
+ struct gl_context *private_refcount_ctx;
+ /* This mechanism allows passing buffer references to the driver without
+ * using atomics to increase the reference count.
+ *
+ * This private refcount can be decremented without atomics but only one
+ * context (ctx above) can use this counter to be thread-safe.
+ *
+ * This number is atomically added to buffer->reference.count at
+ * initialization. If it's never used, the same number is atomically
+ * subtracted from buffer->reference.count before destruction. If this
+ * number is decremented, we can pass that reference to the driver without
+ * touching reference.count. At buffer destruction we only subtract
+ * the number of references we did not return. This can possibly turn
+ * a million atomic increments into 1 add and 1 subtract atomic op.
+ */
+ int private_refcount;
+
+ struct pipe_transfer *transfer[MAP_COUNT];
};
diff --git a/src/mesa/state_tracker/st_atom_array.cpp b/src/mesa/state_tracker/st_atom_array.cpp
index 6978074c543..ec5892ed25e 100644
--- a/src/mesa/state_tracker/st_atom_array.cpp
+++ b/src/mesa/state_tracker/st_atom_array.cpp
@@ -414,7 +414,7 @@ st_create_gallium_vertex_state(struct gl_context *ctx,
screen->create_vertex_state(screen, &vbuffer[0], velements.velems,
velements.count,
indexbuf ?
- st_buffer_object(indexbuf)->buffer : NULL,
+ indexbuf->buffer : NULL,
enabled_attribs);
for (unsigned i = 0; i < num_vbuffers; i++)
diff --git a/src/mesa/state_tracker/st_atom_atomicbuf.c b/src/mesa/state_tracker/st_atom_atomicbuf.c
index 2121e85e609..11dbc563e11 100644
--- a/src/mesa/state_tracker/st_atom_atomicbuf.c
+++ b/src/mesa/state_tracker/st_atom_atomicbuf.c
@@ -44,8 +44,7 @@ static void
st_binding_to_sb(struct gl_buffer_binding *binding,
struct pipe_shader_buffer *sb)
{
- struct st_buffer_object *st_obj =
- st_buffer_object(binding->BufferObject);
+ struct gl_buffer_object *st_obj = binding->BufferObject;
if (st_obj && st_obj->buffer) {
sb->buffer = st_obj->buffer;
diff --git a/src/mesa/state_tracker/st_atom_image.c b/src/mesa/state_tracker/st_atom_image.c
index 0cb69c2ba26..320f195dd71 100644
--- a/src/mesa/state_tracker/st_atom_image.c
+++ b/src/mesa/state_tracker/st_atom_image.c
@@ -88,8 +88,7 @@ st_convert_image(const struct st_context *st, const struct gl_image_unit *u,
}
if (stObj->base.Target == GL_TEXTURE_BUFFER) {
- struct st_buffer_object *stbuf =
- st_buffer_object(stObj->base.BufferObject);
+ struct gl_buffer_object *stbuf = stObj->base.BufferObject;
unsigned base, size;
if (!stbuf || !stbuf->buffer) {
diff --git a/src/mesa/state_tracker/st_atom_storagebuf.c b/src/mesa/state_tracker/st_atom_storagebuf.c
index 60028365bc4..68c7745f383 100644
--- a/src/mesa/state_tracker/st_atom_storagebuf.c
+++ b/src/mesa/state_tracker/st_atom_storagebuf.c
@@ -51,12 +51,12 @@ st_bind_ssbos(struct st_context *st, struct gl_program *prog,
for (i = 0; i < prog->info.num_ssbos; i++) {
struct gl_buffer_binding *binding;
- struct st_buffer_object *st_obj;
+ struct gl_buffer_object *st_obj;
struct pipe_shader_buffer *sb = &buffers[i];
binding = &st->ctx->ShaderStorageBufferBindings[
prog->sh.ShaderStorageBlocks[i]->Binding];
- st_obj = st_buffer_object(binding->BufferObject);
+ st_obj = binding->BufferObject;
sb->buffer = st_obj ? st_obj->buffer : NULL;
diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
index 459b854a000..4ad457684a1 100644
--- a/src/mesa/state_tracker/st_cb_bufferobjects.c
+++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
@@ -59,37 +59,35 @@
struct gl_buffer_object *
st_bufferobj_alloc(struct gl_context *ctx, GLuint name)
{
- struct st_buffer_object *st_obj = ST_CALLOC_STRUCT(st_buffer_object);
+ struct gl_buffer_object *obj = ST_CALLOC_STRUCT(gl_buffer_object);
- if (!st_obj)
+ if (!obj)
return NULL;
- _mesa_initialize_buffer_object(ctx, &st_obj->Base, name);
+ _mesa_initialize_buffer_object(ctx, obj, name);
- return &st_obj->Base;
+ return obj;
}
static void
release_buffer(struct gl_buffer_object *obj)
{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
- if (!st_obj->buffer)
+ if (!obj->buffer)
return;
/* Subtract the remaining private references before unreferencing
* the buffer. See the header file for explanation.
*/
- if (st_obj->private_refcount) {
- assert(st_obj->private_refcount > 0);
- p_atomic_add(&st_obj->buffer->reference.count,
- -st_obj->private_refcount);
- st_obj->private_refcount = 0;
+ if (obj->private_refcount) {
+ assert(obj->private_refcount > 0);
+ p_atomic_add(&obj->buffer->reference.count,
+ -obj->private_refcount);
+ obj->private_refcount = 0;
}
- st_obj->ctx = NULL;
+ obj->private_refcount_ctx = NULL;
- pipe_resource_reference(&st_obj->buffer, NULL);
+ pipe_resource_reference(&obj->buffer, NULL);
}
@@ -119,8 +117,6 @@ st_bufferobj_subdata(struct gl_context *ctx,
GLsizeiptrARB size,
const void * data, struct gl_buffer_object *obj)
{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
/* we may be called from VBO code, so double-check params here */
assert(offset >= 0);
assert(size >= 0);
@@ -137,7 +133,7 @@ st_bufferobj_subdata(struct gl_context *ctx,
if (!data)
return;
- if (!st_obj->buffer) {
+ if (!obj->buffer) {
/* we probably ran out of memory during buffer allocation */
return;
}
@@ -153,7 +149,7 @@ st_bufferobj_subdata(struct gl_context *ctx,
*/
struct pipe_context *pipe = st_context(ctx)->pipe;
- pipe->buffer_subdata(pipe, st_obj->buffer,
+ pipe->buffer_subdata(pipe, obj->buffer,
_mesa_bufferobj_mapped(obj, MAP_USER) ?
PIPE_MAP_DIRECTLY : 0,
offset, size, data);
@@ -169,8 +165,6 @@ st_bufferobj_get_subdata(struct gl_context *ctx,
GLsizeiptrARB size,
void * data, struct gl_buffer_object *obj)
{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
/* we may be called from VBO code, so double-check params here */
assert(offset >= 0);
assert(size >= 0);
@@ -179,12 +173,12 @@ st_bufferobj_get_subdata(struct gl_context *ctx,
if (!size)
return;
- if (!st_obj->buffer) {
+ if (!obj->buffer) {
/* we probably ran out of memory during buffer allocation */
return;
}
- pipe_buffer_read(st_context(ctx)->pipe, st_obj->buffer,
+ pipe_buffer_read(st_context(ctx)->pipe, obj->buffer,
offset, size, data);
}
@@ -305,7 +299,6 @@ bufferobj_data(struct gl_context *ctx,
struct st_context *st = st_context(ctx);
struct pipe_context *pipe = st->pipe;
struct pipe_screen *screen = st->screen;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
struct st_memory_object *st_mem_obj = st_memory_object(memObj);
bool is_mapped = _mesa_bufferobj_mapped(obj, MAP_USER);
@@ -314,15 +307,15 @@ bufferobj_data(struct gl_context *ctx,
* to 64 bits doesn't make much sense since hw support
* for > 4GB resources is limited.
*/
- st_obj->Base.Size = 0;
+ obj->Size = 0;
return GL_FALSE;
}
if (target != GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD &&
- size && st_obj->buffer &&
- st_obj->Base.Size == size &&
- st_obj->Base.Usage == usage &&
- st_obj->Base.StorageFlags == storageFlags) {
+ size && obj->buffer &&
+ obj->Size == size &&
+ obj->Usage == usage &&
+ obj->StorageFlags == storageFlags) {
if (data) {
/* Just discard the old contents and write new data.
* This should be the same as creating a new buffer, but we avoid
@@ -333,7 +326,7 @@ bufferobj_data(struct gl_context *ctx,
* PIPE_MAP_DIRECTLY supresses implicit buffer range
* invalidation.
*/
- pipe->buffer_subdata(pipe, st_obj->buffer,
+ pipe->buffer_subdata(pipe, obj->buffer,
is_mapped ? PIPE_MAP_DIRECTLY :
PIPE_MAP_DISCARD_WHOLE_RESOURCE,
0, size, data);
@@ -341,14 +334,14 @@ bufferobj_data(struct gl_context *ctx,
} else if (is_mapped) {
return GL_TRUE; /* can't reallocate, nothing to do */
} else if (screen->get_param(screen, PIPE_CAP_INVALIDATE_BUFFER)) {
- pipe->invalidate_resource(pipe, st_obj->buffer);
+ pipe->invalidate_resource(pipe, obj->buffer);
return GL_TRUE;
}
}
- st_obj->Base.Size = size;
- st_obj->Base.Usage = usage;
- st_obj->Base.StorageFlags = storageFlags;
+ obj->Size = size;
+ obj->Usage = usage;
+ obj->StorageFlags = storageFlags;
release_buffer(obj);
@@ -370,7 +363,7 @@ bufferobj_data(struct gl_context *ctx,
buffer.format = PIPE_FORMAT_R8_UNORM; /* want TYPELESS or similar */
buffer.bind = bindings;
buffer.usage =
- buffer_usage(target, st_obj->Base.Immutable, storageFlags, usage);
+ buffer_usage(target, obj->Immutable, storageFlags, usage);
buffer.flags = storage_flags_to_buffer_flags(storageFlags);
buffer.width0 = size;
buffer.height0 = 1;
@@ -378,42 +371,42 @@ bufferobj_data(struct gl_context *ctx,
buffer.array_size = 1;
if (st_mem_obj) {
- st_obj->buffer = screen->resource_from_memobj(screen, &buffer,
+ obj->buffer = screen->resource_from_memobj(screen, &buffer,
st_mem_obj->memory,
offset);
}
else if (target == GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD) {
- st_obj->buffer =
+ obj->buffer =
screen->resource_from_user_memory(screen, &buffer, (void*)data);
}
else {
- st_obj->buffer = screen->resource_create(screen, &buffer);
+ obj->buffer = screen->resource_create(screen, &buffer);
- if (st_obj->buffer && data)
- pipe_buffer_write(pipe, st_obj->buffer, 0, size, data);
+ if (obj->buffer && data)
+ pipe_buffer_write(pipe, obj->buffer, 0, size, data);
}
- if (!st_obj->buffer) {
+ if (!obj->buffer) {
/* out of memory */
- st_obj->Base.Size = 0;
+ obj->Size = 0;
return GL_FALSE;
}
- st_obj->ctx = ctx;
+ obj->private_refcount_ctx = ctx;
}
/* The current buffer may be bound, so we have to revalidate all atoms that
* might be using it.
*/
- if (st_obj->Base.UsageHistory & USAGE_ARRAY_BUFFER)
+ if (obj->UsageHistory & USAGE_ARRAY_BUFFER)
ctx->NewDriverState |= ST_NEW_VERTEX_ARRAYS;
- if (st_obj->Base.UsageHistory & USAGE_UNIFORM_BUFFER)
+ if (obj->UsageHistory & USAGE_UNIFORM_BUFFER)
ctx->NewDriverState |= ST_NEW_UNIFORM_BUFFER;
- if (st_obj->Base.UsageHistory & USAGE_SHADER_STORAGE_BUFFER)
+ if (obj->UsageHistory & USAGE_SHADER_STORAGE_BUFFER)
ctx->NewDriverState |= ST_NEW_STORAGE_BUFFER;
- if (st_obj->Base.UsageHistory & USAGE_TEXTURE_BUFFER)
+ if (obj->UsageHistory & USAGE_TEXTURE_BUFFER)
ctx->NewDriverState |= ST_NEW_SAMPLER_VIEWS | ST_NEW_IMAGE_UNITS;
- if (st_obj->Base.UsageHistory & USAGE_ATOMIC_COUNTER_BUFFER)
+ if (obj->UsageHistory & USAGE_ATOMIC_COUNTER_BUFFER)
ctx->NewDriverState |= ctx->DriverFlags.NewAtomicBuffer;
return GL_TRUE;
@@ -461,17 +454,16 @@ st_bufferobj_invalidate(struct gl_context *ctx,
{
struct st_context *st = st_context(ctx);
struct pipe_context *pipe = st->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
/* We ignore partial invalidates. */
if (offset != 0 || size != obj->Size)
return;
/* If the buffer is mapped, we can't invalidate it. */
- if (!st_obj->buffer || _mesa_bufferobj_mapped(obj, MAP_USER))
+ if (!obj->buffer || _mesa_bufferobj_mapped(obj, MAP_USER))
return;
- pipe->invalidate_resource(pipe, st_obj->buffer);
+ pipe->invalidate_resource(pipe, obj->buffer);
}
@@ -536,7 +528,6 @@ st_bufferobj_map_range(struct gl_context *ctx,
gl_map_buffer_index index)
{
struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
assert(offset >= 0);
assert(length >= 0);
@@ -558,17 +549,17 @@ st_bufferobj_map_range(struct gl_context *ctx,
}
obj->Mappings[index].Pointer = pipe_buffer_map_range(pipe,
- st_obj->buffer,
+ obj->buffer,
offset, length,
transfer_flags,
- &st_obj->transfer[index]);
+ &obj->transfer[index]);
if (obj->Mappings[index].Pointer) {
obj->Mappings[index].Offset = offset;
obj->Mappings[index].Length = length;
obj->Mappings[index].AccessFlags = access;
}
else {
- st_obj->transfer[index] = NULL;
+ obj->transfer[index] = NULL;
}
return obj->Mappings[index].Pointer;
@@ -582,7 +573,6 @@ st_bufferobj_flush_mapped_range(struct gl_context *ctx,
gl_map_buffer_index index)
{
struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
/* Subrange is relative to mapped range */
assert(offset >= 0);
@@ -593,7 +583,7 @@ st_bufferobj_flush_mapped_range(struct gl_context *ctx,
if (!length)
return;
- pipe_buffer_flush_mapped_range(pipe, st_obj->transfer[index],
+ pipe_buffer_flush_mapped_range(pipe, obj->transfer[index],
obj->Mappings[index].Offset + offset,
length);
}
@@ -607,12 +597,11 @@ st_bufferobj_unmap(struct gl_context *ctx, struct gl_buffer_object *obj,
gl_map_buffer_index index)
{
struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
if (obj->Mappings[index].Length)
- pipe_buffer_unmap(pipe, st_obj->transfer[index]);
+ pipe_buffer_unmap(pipe, obj->transfer[index]);
- st_obj->transfer[index] = NULL;
+ obj->transfer[index] = NULL;
obj->Mappings[index].Pointer = NULL;
obj->Mappings[index].Offset = 0;
obj->Mappings[index].Length = 0;
@@ -631,8 +620,6 @@ st_copy_buffer_subdata(struct gl_context *ctx,
GLsizeiptr size)
{
struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *srcObj = st_buffer_object(src);
- struct st_buffer_object *dstObj = st_buffer_object(dst);
struct pipe_box box;
if (!size)
@@ -644,8 +631,8 @@ st_copy_buffer_subdata(struct gl_context *ctx,
u_box_1d(readOffset, size, &box);
- pipe->resource_copy_region(pipe, dstObj->buffer, 0, writeOffset, 0, 0,
- srcObj->buffer, 0, &box);
+ pipe->resource_copy_region(pipe, dst->buffer, 0, writeOffset, 0, 0,
+ src->buffer, 0, &box);
}
/**
@@ -659,7 +646,6 @@ st_clear_buffer_subdata(struct gl_context *ctx,
struct gl_buffer_object *bufObj)
{
struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *buf = st_buffer_object(bufObj);
static const char zeros[16] = {0};
if (!pipe->clear_buffer) {
@@ -671,7 +657,7 @@ st_clear_buffer_subdata(struct gl_context *ctx,
if (!clearValue)
clearValue = zeros;
- pipe->clear_buffer(pipe, buf->buffer, offset, size,
+ pipe->clear_buffer(pipe, bufObj->buffer, offset, size,
clearValue, clearValueSize);
}
@@ -682,12 +668,11 @@ st_bufferobj_page_commitment(struct gl_context *ctx,
GLboolean commit)
{
struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *buf = st_buffer_object(bufferObj);
struct pipe_box box;
u_box_1d(offset, size, &box);
- if (!pipe->resource_commit(pipe, buf->buffer, 0, &box, commit)) {
+ if (!pipe->resource_commit(pipe, bufferObj->buffer, 0, &box, commit)) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glBufferPageCommitmentARB(out of memory)");
return;
}
diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.h b/src/mesa/state_tracker/st_cb_bufferobjects.h
index 052e4250d12..e37987d5577 100644
--- a/src/mesa/state_tracker/st_cb_bufferobjects.h
+++ b/src/mesa/state_tracker/st_cb_bufferobjects.h
@@ -35,45 +35,6 @@ struct pipe_resource;
struct pipe_screen;
struct st_context;
-/**
- * State_tracker vertex/pixel buffer object, derived from Mesa's
- * gl_buffer_object.
- */
-struct st_buffer_object
-{
- struct gl_buffer_object Base;
- struct pipe_resource *buffer; /* GPU storage */
-
- struct gl_context *ctx; /* the context that owns private_refcount */
-
- /* This mechanism allows passing buffer references to the driver without
- * using atomics to increase the reference count.
- *
- * This private refcount can be decremented without atomics but only one
- * context (ctx above) can use this counter to be thread-safe.
- *
- * This number is atomically added to buffer->reference.count at
- * initialization. If it's never used, the same number is atomically
- * subtracted from buffer->reference.count before destruction. If this
- * number is decremented, we can pass that reference to the driver without
- * touching reference.count. At buffer destruction we only subtract
- * the number of references we did not return. This can possibly turn
- * a million atomic increments into 1 add and 1 subtract atomic op.
- */
- int private_refcount;
-
- struct pipe_transfer *transfer[MAP_COUNT];
-};
-
-
-/** cast wrapper */
-static inline struct st_buffer_object *
-st_buffer_object(struct gl_buffer_object *obj)
-{
- return (struct st_buffer_object *) obj;
-}
-
-
enum pipe_map_flags
st_access_flags_to_transfer_flags(GLbitfield access, bool wholeBuffer);
@@ -88,8 +49,7 @@ st_get_buffer_reference(struct gl_context *ctx, struct gl_buffer_object *obj)
if (unlikely(!obj))
return NULL;
- struct st_buffer_object *stobj = st_buffer_object(obj);
- struct pipe_resource *buffer = stobj->buffer;
+ struct pipe_resource *buffer = obj->buffer;
if (unlikely(!buffer))
return NULL;
@@ -97,21 +57,21 @@ st_get_buffer_reference(struct gl_context *ctx, struct gl_buffer_object *obj)
/* Only one context is using the fast path. All other contexts must use
* the slow path.
*/
- if (unlikely(stobj->ctx != ctx)) {
+ if (unlikely(obj->private_refcount_ctx != ctx)) {
p_atomic_inc(&buffer->reference.count);
return buffer;
}
- if (unlikely(stobj->private_refcount <= 0)) {
- assert(stobj->private_refcount == 0);
+ if (unlikely(obj->private_refcount <= 0)) {
+ assert(obj->private_refcount == 0);
/* This is the number of atomic increments we will skip. */
- stobj->private_refcount = 100000000;
- p_atomic_add(&buffer->reference.count, stobj->private_refcount);
+ obj->private_refcount = 100000000;
+ p_atomic_add(&buffer->reference.count, obj->private_refcount);
}
/* Return a buffer reference while decrementing the private refcount. */
- stobj->private_refcount--;
+ obj->private_refcount--;
return buffer;
}
diff --git a/src/mesa/state_tracker/st_cb_compute.c b/src/mesa/state_tracker/st_cb_compute.c
index c087eba0bb7..815bec9086e 100644
--- a/src/mesa/state_tracker/st_cb_compute.c
+++ b/src/mesa/state_tracker/st_cb_compute.c
@@ -81,7 +81,7 @@ void st_dispatch_compute_indirect(struct gl_context *ctx,
GLintptr indirect_offset)
{
struct gl_buffer_object *indirect_buffer = ctx->DispatchIndirectBuffer;
- struct pipe_resource *indirect = st_buffer_object(indirect_buffer)->buffer;
+ struct pipe_resource *indirect = indirect_buffer->buffer;
st_dispatch_compute_common(ctx, NULL, NULL, indirect, indirect_offset);
}
diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
index 29372950d28..7161886b965 100644
--- a/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/src/mesa/state_tracker/st_cb_queryobj.c
@@ -393,7 +393,6 @@ st_StoreQueryResult(struct gl_context *ctx, struct gl_query_object *q,
{
struct pipe_context *pipe = st_context(ctx)->pipe;
struct st_query_object *stq = st_query_object(q);
- struct st_buffer_object *stObj = st_buffer_object(buf);
boolean wait = pname == GL_QUERY_RESULT;
enum pipe_query_value_type result_type;
int index;
@@ -407,7 +406,7 @@ st_StoreQueryResult(struct gl_context *ctx, struct gl_query_object *q,
* LE. When a BE one comes along, this needs some form of resolution.
*/
unsigned data[2] = { CPU_TO_LE32(q->Target), 0 };
- pipe_buffer_write(pipe, stObj->buffer, offset,
+ pipe_buffer_write(pipe, buf->buffer, offset,
(ptype == GL_INT64_ARB ||
ptype == GL_UNSIGNED_INT64_ARB) ? 8 : 4,
data);
@@ -476,5 +475,5 @@ st_StoreQueryResult(struct gl_context *ctx, struct gl_query_object *q,
}
pipe->get_query_result_resource(pipe, stq->pq, wait, result_type, index,
- stObj->buffer, offset);
+ buf->buffer, offset);
}
diff --git a/src/mesa/state_tracker/st_cb_semaphoreobjects.c b/src/mesa/state_tracker/st_cb_semaphoreobjects.c
index ad4808672bb..e44161aeea2 100644
--- a/src/mesa/state_tracker/st_cb_semaphoreobjects.c
+++ b/src/mesa/state_tracker/st_cb_semaphoreobjects.c
@@ -86,7 +86,7 @@ st_server_wait_semaphore(struct gl_context *ctx,
struct st_semaphore_object *st_obj = st_semaphore_object(semObj);
struct st_context *st = st_context(ctx);
struct pipe_context *pipe = st->pipe;
- struct st_buffer_object *bufObj;
+ struct gl_buffer_object *bufObj;
struct st_texture_object *texObj;
/* The driver is allowed to flush during fence_server_sync, be prepared */
@@ -108,7 +108,7 @@ st_server_wait_semaphore(struct gl_context *ctx,
if (!bufObjs[i])
continue;
- bufObj = st_buffer_object(bufObjs[i]);
+ bufObj = bufObjs[i];
if (bufObj->buffer)
pipe->flush_resource(pipe, bufObj->buffer);
}
@@ -135,14 +135,14 @@ st_server_signal_semaphore(struct gl_context *ctx,
struct st_semaphore_object *st_obj = st_semaphore_object(semObj);
struct st_context *st = st_context(ctx);
struct pipe_context *pipe = st->pipe;
- struct st_buffer_object *bufObj;
+ struct gl_buffer_object *bufObj;
struct st_texture_object *texObj;
for (unsigned i = 0; i < numBufferBarriers; i++) {
if (!bufObjs[i])
continue;
- bufObj = st_buffer_object(bufObjs[i]);
+ bufObj = bufObjs[i];
if (bufObj->buffer)
pipe->flush_resource(pipe, bufObj->buffer);
}
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 3767ff46d91..8f75e8f971a 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -2373,7 +2373,7 @@ st_CompressedTexSubImage(struct gl_context *ctx, GLuint dims,
buf_offset = buf_offset / addr.bytes_per_pixel;
- buf = st_buffer_object(ctx->Unpack.BufferObj)->buffer;
+ buf = ctx->Unpack.BufferObj->buffer;
addr.xoffset = x / bw;
addr.yoffset = y / bh;
diff --git a/src/mesa/state_tracker/st_cb_xformfb.c b/src/mesa/state_tracker/st_cb_xformfb.c
index 9e4fdce1839..77ec17ff94f 100644
--- a/src/mesa/state_tracker/st_cb_xformfb.c
+++ b/src/mesa/state_tracker/st_cb_xformfb.c
@@ -118,7 +118,7 @@ st_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
/* Convert the transform feedback state into the gallium representation. */
for (i = 0; i < max_num_targets; i++) {
- struct st_buffer_object *bo = st_buffer_object(sobj->base.Buffers[i]);
+ struct gl_buffer_object *bo = sobj->base.Buffers[i];
if (bo && bo->buffer) {
unsigned stream = obj->program->sh.LinkedTransformFeedback->
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index e9fe907f215..4a171d6a8d9 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -157,7 +157,7 @@ prepare_indexed_draw(/* pass both st and ctx to reduce dereferences */
st_get_buffer_reference(ctx, info->index.gl_bo);
info->take_index_buffer_ownership = true;
} else {
- info->index.resource = st_buffer_object(info->index.gl_bo)->buffer;
+ info->index.resource = info->index.gl_bo->buffer;
}
/* Return if the bound element array buffer doesn't have any backing
@@ -251,7 +251,7 @@ st_indirect_draw_vbo(struct gl_context *ctx,
assert(bufobj);
info.index_size = 1 << ib->index_size_shift;
- info.index.resource = st_buffer_object(bufobj)->buffer;
+ info.index.resource = bufobj->buffer;
draw.start = pointer_to_offset(ib->ptr) >> ib->index_size_shift;
info.restart_index = restart_index;
@@ -259,7 +259,7 @@ st_indirect_draw_vbo(struct gl_context *ctx,
}
info.mode = translate_prim(ctx, mode);
- indirect.buffer = st_buffer_object(indirect_data)->buffer;
+ indirect.buffer = indirect_data->buffer;
indirect.offset = indirect_offset;
/* Viewperf2020/Maya draws with a buffer that has no storage. */
@@ -280,7 +280,7 @@ st_indirect_draw_vbo(struct gl_context *ctx,
indirect.stride = stride;
if (indirect_draw_count) {
indirect.indirect_draw_count =
- st_buffer_object(indirect_draw_count)->buffer;
+ indirect_draw_count->buffer;
indirect.indirect_draw_count_offset = indirect_draw_count_offset;
}
cso_draw_vbo(st->cso_context, &info, 0, &indirect, draw);
diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c
index 6359926429e..a215f34a747 100644
--- a/src/mesa/state_tracker/st_draw_feedback.c
+++ b/src/mesa/state_tracker/st_draw_feedback.c
@@ -196,10 +196,8 @@ st_feedback_draw_vbo(struct gl_context *ctx,
goto out_unref_vertex;
if (bufobj && bufobj->Name) {
- struct st_buffer_object *stobj = st_buffer_object(bufobj);
-
start = pointer_to_offset(ib->ptr) >> ib->index_size_shift;
- mapped_indices = pipe_buffer_map(pipe, stobj->buffer,
+ mapped_indices = pipe_buffer_map(pipe, bufobj->buffer,
PIPE_MAP_READ, &ib_transfer);
}
else {
@@ -249,7 +247,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
for (unsigned i = 0; i < prog->sh.NumUniformBlocks; i++) {
struct gl_buffer_binding *binding =
&st->ctx->UniformBufferBindings[prog->sh.UniformBlocks[i]->Binding];
- struct st_buffer_object *st_obj = st_buffer_object(binding->BufferObject);
+ struct gl_buffer_object *st_obj = binding->BufferObject;
struct pipe_resource *buf = st_obj->buffer;
if (!buf)
@@ -279,7 +277,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
struct gl_buffer_binding *binding =
&st->ctx->ShaderStorageBufferBindings[
prog->sh.ShaderStorageBlocks[i]->Binding];
- struct st_buffer_object *st_obj = st_buffer_object(binding->BufferObject);
+ struct gl_buffer_object *st_obj = binding->BufferObject;
struct pipe_resource *buf = st_obj->buffer;
if (!buf)
diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c
index f07f4163a44..7b702ee7cfe 100644
--- a/src/mesa/state_tracker/st_pbo.c
+++ b/src/mesa/state_tracker/st_pbo.c
@@ -107,7 +107,7 @@ st_pbo_addresses_pixelstore(struct st_context *st,
const void *pixels,
struct st_pbo_addresses *addr)
{
- struct pipe_resource *buf = st_buffer_object(store->BufferObj)->buffer;
+ struct pipe_resource *buf = store->BufferObj->buffer;
intptr_t buf_offset = (intptr_t) pixels;
if (buf_offset % addr->bytes_per_pixel)
diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c
index e4add1bd2c6..ea603295eea 100644
--- a/src/mesa/state_tracker/st_sampler_view.c
+++ b/src/mesa/state_tracker/st_sampler_view.c
@@ -682,8 +682,8 @@ st_get_buffer_sampler_view_from_stobj(struct st_context *st,
bool get_reference)
{
struct st_sampler_view *sv;
- struct st_buffer_object *stBuf =
- st_buffer_object(stObj->base.BufferObject);
+ struct gl_buffer_object *stBuf =
+ stObj->base.BufferObject;
if (!stBuf || !stBuf->buffer)
return NULL;
More information about the mesa-commit
mailing list