1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2010 VMware, Inc. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_context.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_inlines.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_simple_list.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "rbug/rbug_context.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "rbug_context.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "rbug_objects.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_destroy(struct pipe_context *_pipe) 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org remove_from_list(&rb_pipe->list); 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->destroy(pipe); 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->pipe = NULL; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(rb_pipe); 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_draw_block_locked(struct rbug_context *rb_pipe, int flag) 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_blocker & flag) { 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->draw_blocked |= flag; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else if ((rb_pipe->draw_rule.blocker & flag) && 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (rb_pipe->draw_blocker & RBUG_BLOCK_RULE)) { 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int k; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean block = FALSE; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sh; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s (%p %p) (%p %p) (%p %u) (%p %u)\n", __FUNCTION__, 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void *) rb_pipe->draw_rule.shader[PIPE_SHADER_FRAGMENT], 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void *) rb_pipe->curr.shader[PIPE_SHADER_FRAGMENT], 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void *) rb_pipe->draw_rule.shader[PIPE_SHADER_VERTEX], 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void *) rb_pipe->curr.shader[PIPE_SHADER_VERTEX], 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void *) rb_pipe->draw_rule.surf, 0, 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void *) rb_pipe->draw_rule.texture, 0); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (sh = 0; sh < PIPE_SHADER_TYPES; sh++) { 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_rule.shader[sh] && 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->draw_rule.shader[sh] == rb_pipe->curr.shader[sh]) 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org block = TRUE; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_rule.surf && 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->draw_rule.surf == rb_pipe->curr.zsbuf) 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org block = TRUE; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_rule.surf) 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (k = 0; k < rb_pipe->curr.nr_cbufs; k++) 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_rule.surf == rb_pipe->curr.cbufs[k]) 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org block = TRUE; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_rule.texture) { 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (sh = 0; sh < Elements(rb_pipe->curr.num_views); sh++) { 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (k = 0; k < rb_pipe->curr.num_views[sh]; k++) { 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_rule.texture == rb_pipe->curr.texs[sh][k]) { 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org block = TRUE; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sh = PIPE_SHADER_TYPES; /* to break out of both loops */ 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (block) 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->draw_blocked |= (flag | RBUG_BLOCK_RULE); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rb_pipe->draw_blocked) 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_notify_draw_blocked(rb_pipe); 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* wait for rbug to clear the blocked flag */ 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (rb_pipe->draw_blocked & flag) { 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->draw_blocked |= flag; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_condvar_wait(rb_pipe->draw_cond, rb_pipe->draw_mutex); 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info) 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->draw_mutex); 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_draw_block_locked(rb_pipe, RBUG_BLOCK_BEFORE); 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX loop over PIPE_SHADER_x here */ 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!(rb_pipe->curr.shader[PIPE_SHADER_FRAGMENT] && rb_pipe->curr.shader[PIPE_SHADER_FRAGMENT]->disabled) && 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !(rb_pipe->curr.shader[PIPE_SHADER_GEOMETRY] && rb_pipe->curr.shader[PIPE_SHADER_GEOMETRY]->disabled) && 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !(rb_pipe->curr.shader[PIPE_SHADER_VERTEX] && rb_pipe->curr.shader[PIPE_SHADER_VERTEX]->disabled)) 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->draw_vbo(pipe, info); 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_draw_block_locked(rb_pipe, RBUG_BLOCK_AFTER); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->draw_mutex); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_query * 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_query(struct pipe_context *_pipe, 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned query_type) 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return pipe->create_query(pipe, 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org query_type); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_destroy_query(struct pipe_context *_pipe, 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *query) 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->destroy_query(pipe, 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org query); 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_begin_query(struct pipe_context *_pipe, 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *query) 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->begin_query(pipe, 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org query); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_end_query(struct pipe_context *_pipe, 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *query) 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->end_query(pipe, 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org query); 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_get_query_result(struct pipe_context *_pipe, 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_query *query, 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean wait, 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union pipe_query_result *result) 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean ret; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = pipe->get_query_result(pipe, 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org query, 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org wait, 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_blend_state(struct pipe_context *_pipe, 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_blend_state *blend) 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *ret; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = pipe->create_blend_state(pipe, 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org blend); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_blend_state(struct pipe_context *_pipe, 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *blend) 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_blend_state(pipe, 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org blend); 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_blend_state(struct pipe_context *_pipe, 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *blend) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->delete_blend_state(pipe, 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org blend); 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_sampler_state(struct pipe_context *_pipe, 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_state *sampler) 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *ret; 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = pipe->create_sampler_state(pipe, 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sampler); 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_fragment_sampler_states(struct pipe_context *_pipe, 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers, 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void **samplers) 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_fragment_sampler_states(pipe, 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_samplers, 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org samplers); 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_vertex_sampler_states(struct pipe_context *_pipe, 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samplers, 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void **samplers) 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_vertex_sampler_states(pipe, 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_samplers, 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org samplers); 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_sampler_state(struct pipe_context *_pipe, 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *sampler) 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->delete_sampler_state(pipe, 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sampler); 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_rasterizer_state(struct pipe_context *_pipe, 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_rasterizer_state *rasterizer) 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *ret; 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = pipe->create_rasterizer_state(pipe, 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer); 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_rasterizer_state(struct pipe_context *_pipe, 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *rasterizer) 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_rasterizer_state(pipe, 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer); 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_rasterizer_state(struct pipe_context *_pipe, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *rasterizer) 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->delete_rasterizer_state(pipe, 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_depth_stencil_alpha_state(struct pipe_context *_pipe, 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_depth_stencil_alpha_state *depth_stencil_alpha) 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *ret; 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = pipe->create_depth_stencil_alpha_state(pipe, 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_stencil_alpha); 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_depth_stencil_alpha_state(struct pipe_context *_pipe, 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *depth_stencil_alpha) 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_depth_stencil_alpha_state(pipe, 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_stencil_alpha); 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_depth_stencil_alpha_state(struct pipe_context *_pipe, 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *depth_stencil_alpha) 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->delete_depth_stencil_alpha_state(pipe, 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_stencil_alpha); 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_fs_state(struct pipe_context *_pipe, 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_shader_state *state) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *result; 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result = pipe->create_fs_state(pipe, state); 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!result) 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return rbug_shader_create(rb_pipe, state, result, RBUG_SHADER_FRAGMENT); 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_fs_state(struct pipe_context *_pipe, 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *_fs) 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *fs; 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fs = rbug_shader_unwrap(_fs); 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.shader[PIPE_SHADER_FRAGMENT] = rbug_shader(_fs); 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_fs_state(pipe, 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fs); 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_fs_state(struct pipe_context *_pipe, 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *_fs) 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_shader *rb_shader = rbug_shader(_fs); 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_shader_destroy(rb_pipe, rb_shader); 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_vs_state(struct pipe_context *_pipe, 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_shader_state *state) 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *result; 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result = pipe->create_vs_state(pipe, state); 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!result) 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return rbug_shader_create(rb_pipe, state, result, RBUG_SHADER_VERTEX); 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_vs_state(struct pipe_context *_pipe, 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *_vs) 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *vs; 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vs = rbug_shader_unwrap(_vs); 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.shader[PIPE_SHADER_VERTEX] = rbug_shader(_vs); 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_vs_state(pipe, 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vs); 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_vs_state(struct pipe_context *_pipe, 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *_vs) 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_shader *rb_shader = rbug_shader(_vs); 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_shader_destroy(rb_pipe, rb_shader); 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_gs_state(struct pipe_context *_pipe, 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_shader_state *state) 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *result; 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result = pipe->create_gs_state(pipe, state); 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!result) 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return rbug_shader_create(rb_pipe, state, result, RBUG_SHADER_GEOM); 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_gs_state(struct pipe_context *_pipe, 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *_gs) 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *gs; 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gs = rbug_shader_unwrap(_gs); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.shader[PIPE_SHADER_GEOMETRY] = rbug_shader(_gs); 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_gs_state(pipe, 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gs); 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_gs_state(struct pipe_context *_pipe, 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *_gs) 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_shader *rb_shader = rbug_shader(_gs); 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_shader_destroy(rb_pipe, rb_shader); 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_create_vertex_elements_state(struct pipe_context *_pipe, 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_elements, 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_vertex_element *vertex_elements) 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *ret; 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = pipe->create_vertex_elements_state(pipe, 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_elements, 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vertex_elements); 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_bind_vertex_elements_state(struct pipe_context *_pipe, 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *velems) 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->bind_vertex_elements_state(pipe, 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org velems); 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_delete_vertex_elements_state(struct pipe_context *_pipe, 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *velems) 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->delete_vertex_elements_state(pipe, 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org velems); 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_blend_color(struct pipe_context *_pipe, 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_blend_color *blend_color) 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_blend_color(pipe, 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org blend_color); 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_stencil_ref(struct pipe_context *_pipe, 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_stencil_ref *stencil_ref) 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_stencil_ref(pipe, 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_ref); 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_clip_state(struct pipe_context *_pipe, 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_clip_state *clip) 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_clip_state(pipe, 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org clip); 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_constant_buffer(struct pipe_context *_pipe, 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint shader, 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint index, 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_constant_buffer *_cb) 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_constant_buffer cb; 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX hmm? unwrap the input state */ 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_cb) { 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cb = *_cb; 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cb.buffer = rbug_resource_unwrap(_cb->buffer); 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_constant_buffer(pipe, 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shader, 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org index, 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _cb ? &cb : NULL); 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_framebuffer_state(struct pipe_context *_pipe, 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_framebuffer_state *_state) 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_framebuffer_state unwrapped_state; 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_framebuffer_state *state = NULL; 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* must protect curr status */ 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.nr_cbufs = 0; 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(rb_pipe->curr.cbufs, 0, sizeof(rb_pipe->curr.cbufs)); 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.zsbuf = NULL; 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unwrap the input state */ 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_state) { 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(&unwrapped_state, _state, sizeof(unwrapped_state)); 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.nr_cbufs = _state->nr_cbufs; 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for(i = 0; i < _state->nr_cbufs; i++) { 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unwrapped_state.cbufs[i] = rbug_surface_unwrap(_state->cbufs[i]); 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_state->cbufs[i]) 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.cbufs[i] = rbug_resource(_state->cbufs[i]->texture); 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unwrapped_state.zsbuf = rbug_surface_unwrap(_state->zsbuf); 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_state->zsbuf) 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.zsbuf = rbug_resource(_state->zsbuf->texture); 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state = &unwrapped_state; 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_framebuffer_state(pipe, 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state); 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_polygon_stipple(struct pipe_context *_pipe, 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_poly_stipple *poly_stipple) 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_polygon_stipple(pipe, 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org poly_stipple); 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_scissor_state(struct pipe_context *_pipe, 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_scissor_state *scissor) 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_scissor_state(pipe, 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org scissor); 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_viewport_state(struct pipe_context *_pipe, 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_viewport_state *viewport) 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_viewport_state(pipe, 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org viewport); 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_sampler_views(struct pipe_context *_pipe, 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned shader, 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned start, 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num, 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **_views) 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS]; 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **views = NULL; 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(start == 0); /* XXX fix */ 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* must protect curr status */ 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.num_views[shader] = 0; 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(rb_pipe->curr.views[shader], 0, sizeof(rb_pipe->curr.views[shader])); 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(rb_pipe->curr.texs[shader], 0, sizeof(rb_pipe->curr.texs[shader])); 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(unwrapped_views, 0, sizeof(unwrapped_views)); 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_views) { 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.num_views[shader] = num; 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < num; i++) { 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.views[shader][i] = rbug_sampler_view(_views[i]); 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->curr.texs[shader][i] = rbug_resource(_views[i] ? _views[i]->texture : NULL); 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unwrapped_views[i] = rbug_sampler_view_unwrap(_views[i]); 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org views = unwrapped_views; 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (shader) { 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_VERTEX: 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_vertex_sampler_views(pipe, num, views); 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_FRAGMENT: 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_fragment_sampler_views(pipe, num, views); 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_vertex_sampler_views(struct pipe_context *_pipe, 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num, 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **_views) 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_set_sampler_views(_pipe, PIPE_SHADER_VERTEX, 0, num, _views); 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_fragment_sampler_views(struct pipe_context *_pipe, 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num, 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view **_views) 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_set_sampler_views(_pipe, PIPE_SHADER_FRAGMENT, 0, num, _views); 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_vertex_buffers(struct pipe_context *_pipe, 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_buffers, 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_vertex_buffer *_buffers) 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_vertex_buffer unwrapped_buffers[PIPE_MAX_SHADER_INPUTS]; 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_vertex_buffer *buffers = NULL; 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (num_buffers) { 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(unwrapped_buffers, _buffers, num_buffers * sizeof(*_buffers)); 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < num_buffers; i++) 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unwrapped_buffers[i].buffer = rbug_resource_unwrap(_buffers[i].buffer); 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buffers = unwrapped_buffers; 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_vertex_buffers(pipe, 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_buffers, 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buffers); 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_index_buffer(struct pipe_context *_pipe, 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_index_buffer *_ib) 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_index_buffer unwrapped_ib, *ib = NULL; 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_ib) { 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unwrapped_ib = *_ib; 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unwrapped_ib.buffer = rbug_resource_unwrap(_ib->buffer); 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ib = &unwrapped_ib; 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_index_buffer(pipe, ib); 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_set_sample_mask(struct pipe_context *_pipe, 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sample_mask) 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->set_sample_mask(pipe, sample_mask); 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_resource_copy_region(struct pipe_context *_pipe, 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *_dst, 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dst_level, 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstx, 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dsty, 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstz, 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *_src, 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned src_level, 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *src_box) 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_resource *rb_resource_dst = rbug_resource(_dst); 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_resource *rb_resource_src = rbug_resource(_src); 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *dst = rb_resource_dst->resource; 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *src = rb_resource_src->resource; 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->resource_copy_region(pipe, 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst, 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_level, 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dstx, 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsty, 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dstz, 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src, 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_level, 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_box); 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_clear(struct pipe_context *_pipe, 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned buffers, 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double depth, 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stencil) 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->clear(pipe, 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buffers, 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org color, 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth, 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil); 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_clear_render_target(struct pipe_context *_pipe, 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *_dst, 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const union pipe_color_union *color, 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstx, unsigned dsty, 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width, unsigned height) 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_surface *rb_surface_dst = rbug_surface(_dst); 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *dst = rb_surface_dst->surface; 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->clear_render_target(pipe, 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst, 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org color, 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dstx, 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsty, 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width, 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height); 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_clear_depth_stencil(struct pipe_context *_pipe, 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *_dst, 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned clear_flags, 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double depth, 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stencil, 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dstx, unsigned dsty, 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned width, unsigned height) 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_surface *rb_surface_dst = rbug_surface(_dst); 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *dst = rb_surface_dst->surface; 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->clear_depth_stencil(pipe, 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst, 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org clear_flags, 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth, 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil, 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dstx, 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsty, 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width, 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height); 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_flush(struct pipe_context *_pipe, 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle **fence) 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe->flush(pipe, 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fence); 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_sampler_view * 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_create_sampler_view(struct pipe_context *_pipe, 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *_resource, 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_sampler_view *templ) 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_resource *rb_resource = rbug_resource(_resource); 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource = rb_resource->resource; 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view *result; 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result = pipe->create_sampler_view(pipe, 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org resource, 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org templ); 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (result) 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return rbug_sampler_view_create(rb_pipe, rb_resource, result); 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_sampler_view_destroy(struct pipe_context *_pipe, 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_sampler_view *_view) 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_sampler_view_destroy(rbug_context(_pipe), 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_sampler_view(_view)); 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_surface * 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_create_surface(struct pipe_context *_pipe, 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *_resource, 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_surface *surf_tmpl) 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_resource *rb_resource = rbug_resource(_resource); 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe = rb_pipe->pipe; 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource = rb_resource->resource; 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *result; 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result = pipe->create_surface(pipe, 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org resource, 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf_tmpl); 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (result) 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return rbug_surface_create(rb_pipe, rb_resource, result); 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_surface_destroy(struct pipe_context *_pipe, 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface *_surface) 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_surface *rb_surface = rbug_surface(_surface); 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_surface_destroy(rb_pipe, 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_surface); 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_transfer * 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_get_transfer(struct pipe_context *_context, 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *_resource, 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level, 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage, 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *box) 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_context); 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_resource *rb_resource = rbug_resource(_resource); 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context = rb_pipe->pipe; 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource = rb_resource->resource; 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *result; 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org result = context->get_transfer(context, 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org resource, 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org level, 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org usage, 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box); 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (result) 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return rbug_transfer_create(rb_pipe, rb_resource, result); 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_transfer_destroy(struct pipe_context *_pipe, 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *_transfer) 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_pipe); 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_transfer *rb_transfer =rbug_transfer(_transfer); 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_transfer_destroy(rb_pipe, 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_transfer); 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_transfer_map(struct pipe_context *_context, 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *_transfer) 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_context); 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_transfer *rb_transfer = rbug_transfer(_transfer); 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context = rb_pipe->pipe; 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *transfer = rb_transfer->transfer; 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *ret; 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = context->transfer_map(context, 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org transfer); 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_transfer_flush_region(struct pipe_context *_context, 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *_transfer, 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *box) 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_context); 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_transfer *rb_transfer = rbug_transfer(_transfer); 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context = rb_pipe->pipe; 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *transfer = rb_transfer->transfer; 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org context->transfer_flush_region(context, 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org transfer, 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box); 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_transfer_unmap(struct pipe_context *_context, 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *_transfer) 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_context); 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_transfer *rb_transfer = rbug_transfer(_transfer); 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context = rb_pipe->pipe; 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *transfer = rb_transfer->transfer; 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org context->transfer_unmap(context, 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org transfer); 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_transfer_inline_write(struct pipe_context *_context, 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *_resource, 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level, 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage, 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *box, 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *data, 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride, 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned layer_stride) 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe = rbug_context(_context); 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_resource *rb_resource = rbug_resource(_resource); 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *context = rb_pipe->pipe; 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource = rb_resource->resource; 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_lock(rb_pipe->call_mutex); 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org context->transfer_inline_write(context, 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org resource, 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org level, 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org usage, 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org box, 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data, 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stride, 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org layer_stride); 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_unlock(rb_pipe->call_mutex); 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_context * 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgrbug_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_context *rb_pipe; 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct rbug_screen *rb_screen = rbug_screen(_screen); 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!rb_screen) 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe = CALLOC_STRUCT(rbug_context); 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!rb_pipe) 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_init(rb_pipe->draw_mutex); 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_condvar_init(rb_pipe->draw_cond); 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_init(rb_pipe->call_mutex); 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_mutex_init(rb_pipe->list_mutex); 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org make_empty_list(&rb_pipe->shaders); 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.screen = _screen; 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.priv = pipe->priv; /* expose wrapped data */ 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.draw = NULL; 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.destroy = rbug_destroy; 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.draw_vbo = rbug_draw_vbo; 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_query = rbug_create_query; 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.destroy_query = rbug_destroy_query; 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.begin_query = rbug_begin_query; 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.end_query = rbug_end_query; 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.get_query_result = rbug_get_query_result; 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_blend_state = rbug_create_blend_state; 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_blend_state = rbug_bind_blend_state; 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_blend_state = rbug_delete_blend_state; 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_sampler_state = rbug_create_sampler_state; 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_fragment_sampler_states = rbug_bind_fragment_sampler_states; 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_vertex_sampler_states = rbug_bind_vertex_sampler_states; 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_sampler_state = rbug_delete_sampler_state; 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_rasterizer_state = rbug_create_rasterizer_state; 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_rasterizer_state = rbug_bind_rasterizer_state; 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_rasterizer_state = rbug_delete_rasterizer_state; 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_depth_stencil_alpha_state = rbug_create_depth_stencil_alpha_state; 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_depth_stencil_alpha_state = rbug_bind_depth_stencil_alpha_state; 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_depth_stencil_alpha_state = rbug_delete_depth_stencil_alpha_state; 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_fs_state = rbug_create_fs_state; 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_fs_state = rbug_bind_fs_state; 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_fs_state = rbug_delete_fs_state; 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_vs_state = rbug_create_vs_state; 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_vs_state = rbug_bind_vs_state; 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_vs_state = rbug_delete_vs_state; 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_gs_state = rbug_create_gs_state; 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_gs_state = rbug_bind_gs_state; 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_gs_state = rbug_delete_gs_state; 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_vertex_elements_state = rbug_create_vertex_elements_state; 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.bind_vertex_elements_state = rbug_bind_vertex_elements_state; 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.delete_vertex_elements_state = rbug_delete_vertex_elements_state; 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_blend_color = rbug_set_blend_color; 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_stencil_ref = rbug_set_stencil_ref; 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_clip_state = rbug_set_clip_state; 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_constant_buffer = rbug_set_constant_buffer; 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_framebuffer_state = rbug_set_framebuffer_state; 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_polygon_stipple = rbug_set_polygon_stipple; 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_scissor_state = rbug_set_scissor_state; 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_viewport_state = rbug_set_viewport_state; 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_fragment_sampler_views = rbug_set_fragment_sampler_views; 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_vertex_sampler_views = rbug_set_vertex_sampler_views; 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_vertex_buffers = rbug_set_vertex_buffers; 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_index_buffer = rbug_set_index_buffer; 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.set_sample_mask = rbug_set_sample_mask; 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.resource_copy_region = rbug_resource_copy_region; 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.clear = rbug_clear; 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.clear_render_target = rbug_clear_render_target; 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.clear_depth_stencil = rbug_clear_depth_stencil; 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.flush = rbug_flush; 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_sampler_view = rbug_context_create_sampler_view; 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.sampler_view_destroy = rbug_context_sampler_view_destroy; 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.create_surface = rbug_context_create_surface; 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.surface_destroy = rbug_context_surface_destroy; 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.get_transfer = rbug_context_get_transfer; 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.transfer_destroy = rbug_context_transfer_destroy; 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.transfer_map = rbug_context_transfer_map; 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.transfer_unmap = rbug_context_transfer_unmap; 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.transfer_flush_region = rbug_context_transfer_flush_region; 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->base.transfer_inline_write = rbug_context_transfer_inline_write; 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->pipe = pipe; 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rbug_screen_add_to_list(rb_screen, contexts, rb_pipe); 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (debug_get_bool_option("GALLIUM_RBUG_START_BLOCKED", FALSE)) { 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rb_pipe->draw_blocked = RBUG_BLOCK_BEFORE; 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &rb_pipe->base; 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1237