+ VALIDATE_ATOM(flush, I915_HW_FLUSH);
+ VALIDATE_ATOM(immediate, I915_HW_IMMEDIATE);
+ VALIDATE_ATOM(dynamic, I915_HW_DYNAMIC);
+ VALIDATE_ATOM(static, I915_HW_STATIC);
+ VALIDATE_ATOM(map, I915_HW_MAP);
+ VALIDATE_ATOM(sampler, I915_HW_SAMPLER);
+ VALIDATE_ATOM(constants, I915_HW_CONSTANTS);
+ VALIDATE_ATOM(program, I915_HW_PROGRAM);
+#undef VALIDATE_ATOM
+
+ if (i915->num_validation_buffers == 0)
+ return TRUE;
+
+ if (!i915_winsys_validate_buffers(i915->batch, i915->validation_buffers,
+ i915->num_validation_buffers))
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Push the state into the sarea and/or texture memory.
+ */
+void
+i915_emit_hardware_state(struct i915_context *i915 )
+{
+ unsigned batch_space;
+ uintptr_t save_ptr;
+
+ assert(i915->dirty == 0);
+
+ if (I915_DBG_ON(DBG_ATOMS))
+ i915_dump_hardware_dirty(i915, __FUNCTION__);
+
+ if (!i915_validate_state(i915, &batch_space)) {
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
+ assert(i915_validate_state(i915, &batch_space));
+ }
+
+ if(!BEGIN_BATCH(batch_space)) {
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
+ assert(i915_validate_state(i915, &batch_space));
+ assert(BEGIN_BATCH(batch_space));
+ }
+
+ save_ptr = (uintptr_t)i915->batch->ptr;