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; |