summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/nine/stateblock9.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/state_trackers/nine/stateblock9.c')
-rw-r--r--src/gallium/state_trackers/nine/stateblock9.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/nine/stateblock9.c b/src/gallium/state_trackers/nine/stateblock9.c
index 02ffa8ce0ba..4b7166f0da8 100644
--- a/src/gallium/state_trackers/nine/stateblock9.c
+++ b/src/gallium/state_trackers/nine/stateblock9.c
@@ -25,6 +25,8 @@
#include "basetexture9.h"
#include "nine_helpers.h"
#include "vertexdeclaration9.h"
+#include "vertexbuffer9.h"
+#include "indexbuffer9.h"
#define DBG_CHANNEL DBG_STATEBLOCK
@@ -94,6 +96,18 @@ NineStateBlock9_dtor( struct NineStateBlock9 *This )
}
static void
+NineStateBlock9_BindBuffer( struct NineDevice9 *device,
+ boolean applyToDevice,
+ struct NineBuffer9 **slot,
+ struct NineBuffer9 *buf )
+{
+ if (applyToDevice)
+ NineBindBufferToDevice(device, slot, buf);
+ else
+ nine_bind(slot, buf);
+}
+
+static void
NineStateBlock9_BindTexture( struct NineDevice9 *device,
boolean applyToDevice,
struct NineBaseTexture9 **slot,
@@ -233,7 +247,10 @@ nine_state_copy_common(struct NineDevice9 *device,
/* Index buffer. */
if (mask->changed.group & NINE_STATE_IDXBUF)
- nine_bind(&dst->idxbuf, src->idxbuf);
+ NineStateBlock9_BindBuffer(device,
+ apply,
+ (struct NineBuffer9 **)&dst->idxbuf,
+ (struct NineBuffer9 *)src->idxbuf);
/* Vertex streams. */
if (mask->changed.vtxbuf | mask->changed.stream_freq) {
@@ -241,7 +258,10 @@ nine_state_copy_common(struct NineDevice9 *device,
uint32_t m = mask->changed.vtxbuf | mask->changed.stream_freq;
for (i = 0; m; ++i, m >>= 1) {
if (mask->changed.vtxbuf & (1 << i)) {
- nine_bind(&dst->stream[i], src->stream[i]);
+ NineStateBlock9_BindBuffer(device,
+ apply,
+ (struct NineBuffer9 **)&dst->stream[i],
+ (struct NineBuffer9 *)src->stream[i]);
if (src->stream[i]) {
dst->vtxbuf[i].buffer_offset = src->vtxbuf[i].buffer_offset;
dst->vtxbuf[i].stride = src->vtxbuf[i].stride;
@@ -408,12 +428,18 @@ nine_state_copy_common_all(struct NineDevice9 *device,
src->changed.sampler, sizeof(dst->changed.sampler));
/* Index buffer. */
- nine_bind(&dst->idxbuf, src->idxbuf);
+ NineStateBlock9_BindBuffer(device,
+ apply,
+ (struct NineBuffer9 **)&dst->idxbuf,
+ (struct NineBuffer9 *)src->idxbuf);
/* Vertex streams. */
if (1) {
for (i = 0; i < ARRAY_SIZE(dst->stream); ++i) {
- nine_bind(&dst->stream[i], src->stream[i]);
+ NineStateBlock9_BindBuffer(device,
+ apply,
+ (struct NineBuffer9 **)&dst->stream[i],
+ (struct NineBuffer9 *)src->stream[i]);
if (src->stream[i]) {
dst->vtxbuf[i].buffer_offset = src->vtxbuf[i].buffer_offset;
dst->vtxbuf[i].stride = src->vtxbuf[i].stride;