Subversion Repositories Kolibri OS

Rev

Rev 5060 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5060 Rev 5354
Line 26... Line 26...
26
 */
26
 */
Line 27... Line 27...
27
 
27
 
28
#include "i915_drv.h"
28
#include "i915_drv.h"
Line 29... Line -...
29
#include "intel_renderstate.h"
-
 
30
 
-
 
31
struct render_state {
-
 
32
	const struct intel_renderstate_rodata *rodata;
-
 
33
	struct drm_i915_gem_object *obj;
-
 
34
	u64 ggtt_offset;
-
 
35
	int gen;
-
 
36
};
29
#include "intel_renderstate.h"
37
 
30
 
38
static const struct intel_renderstate_rodata *
31
static const struct intel_renderstate_rodata *
39
render_state_get_rodata(struct drm_device *dev, const int gen)
32
render_state_get_rodata(struct drm_device *dev, const int gen)
40
{
33
{
41
	switch (gen) {
34
	switch (gen) {
42
	case 6:
35
	case 6:
43
		return &gen6_null_state;
36
		return &gen6_null_state;
44
	case 7:
37
	case 7:
45
		return &gen7_null_state;
38
		return &gen7_null_state;
-
 
39
	case 8:
-
 
40
		return &gen8_null_state;
46
	case 8:
41
	case 9:
Line 47... Line 42...
47
		return &gen8_null_state;
42
		return &gen9_null_state;
48
	}
43
	}
Line 111... Line 106...
111
			reloc_index++;
106
			reloc_index++;
112
		}
107
		}
Line 113... Line 108...
113
 
108
 
114
		d[i++] = s;
109
		d[i++] = s;
115
	}
110
	}
Line 116... Line 111...
116
    FreeKernelSpace(d);
111
	kunmap(page);
117
 
112
 
118
	ret = i915_gem_object_set_to_gtt_domain(so->obj, false);
113
	ret = i915_gem_object_set_to_gtt_domain(so->obj, false);
Line 125... Line 120...
125
	}
120
	}
Line 126... Line 121...
126
 
121
 
127
	return 0;
122
	return 0;
Line 128... Line 123...
128
}
123
}
129
 
124
 
130
static void render_state_fini(struct render_state *so)
125
void i915_gem_render_state_fini(struct render_state *so)
131
{
126
{
132
	i915_gem_object_ggtt_unpin(so->obj);
127
	i915_gem_object_ggtt_unpin(so->obj);
Line 133... Line 128...
133
	drm_gem_object_unreference(&so->obj->base);
128
	drm_gem_object_unreference(&so->obj->base);
-
 
129
}
134
}
130
 
135
 
-
 
136
int i915_gem_render_state_init(struct intel_engine_cs *ring)
131
int i915_gem_render_state_prepare(struct intel_engine_cs *ring,
Line 137... Line 132...
137
{
132
				  struct render_state *so)
138
	struct render_state so;
133
{
Line 139... Line 134...
139
	int ret;
134
	int ret;
140
 
135
 
141
	if (WARN_ON(ring->id != RCS))
136
	if (WARN_ON(ring->id != RCS))
Line 142... Line 137...
142
		return -ENOENT;
137
		return -ENOENT;
143
 
138
 
Line 144... Line 139...
144
	ret = render_state_init(&so, ring->dev);
139
	ret = render_state_init(so, ring->dev);
-
 
140
	if (ret)
-
 
141
		return ret;
-
 
142
 
-
 
143
	if (so->rodata == NULL)
-
 
144
		return 0;
-
 
145
 
-
 
146
	ret = render_state_setup(so);
-
 
147
	if (ret) {
-
 
148
		i915_gem_render_state_fini(so);
-
 
149
		return ret;
-
 
150
	}
-
 
151
 
-
 
152
		return 0;
-
 
153
}
145
	if (ret)
154
 
146
		return ret;
155
int i915_gem_render_state_init(struct intel_engine_cs *ring)
-
 
156
{
-
 
157
	struct render_state so;
-
 
158
	int ret;
Line 147... Line 159...
147
 
159
 
148
	if (so.rodata == NULL)
160
	ret = i915_gem_render_state_prepare(ring, &so);
149
		return 0;
161
	if (ret)
150
 
162
		return ret;
Line 162... Line 174...
162
	i915_vma_move_to_active(i915_gem_obj_to_ggtt(so.obj), ring);
174
	i915_vma_move_to_active(i915_gem_obj_to_ggtt(so.obj), ring);
Line 163... Line 175...
163
 
175
 
164
	ret = __i915_add_request(ring, NULL, so.obj, NULL);
176
	ret = __i915_add_request(ring, NULL, so.obj, NULL);
165
	/* __i915_add_request moves object to inactive if it fails */
177
	/* __i915_add_request moves object to inactive if it fails */
166
out:
178
out:
167
	render_state_fini(&so);
179
	i915_gem_render_state_fini(&so);
168
	return ret;
180
	return ret;