nouveau: remove unneeded code from ws, use pipe_buffer_ instead of ws->
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
|
||||
@@ -334,7 +335,7 @@ nv04_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
const struct pipe_constant_buffer *buf )
|
||||
{
|
||||
struct nv04_context *nv04 = nv04_context(pipe);
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
|
||||
assert(shader < PIPE_SHADER_TYPES);
|
||||
assert(index == 0);
|
||||
@@ -342,12 +343,12 @@ nv04_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
if (buf) {
|
||||
void *mapped;
|
||||
if (buf->buffer && buf->buffer->size &&
|
||||
(mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
|
||||
(mapped = pipe_buffer_map(pscreen, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
|
||||
{
|
||||
memcpy(nv04->constbuf[shader], mapped, buf->buffer->size);
|
||||
nv04->constbuf_nr[shader] =
|
||||
buf->buffer->size / (4 * sizeof(float));
|
||||
ws->buffer_unmap(ws, buf->buffer);
|
||||
pipe_buffer_unmap(pscreen, buf->buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "draw/draw_context.h"
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "nv04_context.h"
|
||||
#include "nv04_state.h"
|
||||
@@ -13,6 +14,7 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
|
||||
unsigned indexSize,
|
||||
unsigned prim, unsigned start, unsigned count)
|
||||
{
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
struct nv04_context *nv04 = nv04_context( pipe );
|
||||
struct draw_context *draw = nv04->draw;
|
||||
unsigned i;
|
||||
@@ -25,17 +27,17 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
if (nv04->vtxbuf[i].buffer) {
|
||||
void *buf
|
||||
= pipe->winsys->buffer_map(pipe->winsys,
|
||||
nv04->vtxbuf[i].buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
= pipe_buffer_map(pscreen,
|
||||
nv04->vtxbuf[i].buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_vertex_buffer(draw, i, buf);
|
||||
}
|
||||
}
|
||||
/* Map index buffer, if present */
|
||||
if (indexBuffer) {
|
||||
void *mapped_indexes
|
||||
= pipe->winsys->buffer_map(pipe->winsys, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
= pipe_buffer_map(pscreen, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
|
||||
}
|
||||
else {
|
||||
@@ -55,12 +57,12 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
|
||||
*/
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
if (nv04->vtxbuf[i].buffer) {
|
||||
pipe->winsys->buffer_unmap(pipe->winsys, nv04->vtxbuf[i].buffer);
|
||||
pipe_buffer_unmap(pscreen, nv04->vtxbuf[i].buffer);
|
||||
draw_set_mapped_vertex_buffer(draw, i, NULL);
|
||||
}
|
||||
}
|
||||
if (indexBuffer) {
|
||||
pipe->winsys->buffer_unmap(pipe->winsys, indexBuffer);
|
||||
pipe_buffer_unmap(pscreen, indexBuffer);
|
||||
draw_set_mapped_element_buffer(draw, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
|
||||
#include "util/u_debug.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
#include "pipe/internal/p_winsys_screen.h"
|
||||
|
||||
#include "nv10_context.h"
|
||||
#include "nv10_state.h"
|
||||
@@ -124,11 +123,10 @@ nv10_vbuf_render_map_vertices( struct vbuf_render *render )
|
||||
{
|
||||
struct nv10_vbuf_render *nv10_render = nv10_vbuf_render(render);
|
||||
struct nv10_context *nv10 = nv10_render->nv10;
|
||||
struct pipe_winsys *winsys = nv10->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv10->pipe.screen;
|
||||
|
||||
return winsys->buffer_map(winsys,
|
||||
nv10_render->buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
return pipe_buffer_map(pscreen, nv10_render->buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -138,10 +136,10 @@ nv10_vbuf_render_unmap_vertices( struct vbuf_render *render,
|
||||
{
|
||||
struct nv10_vbuf_render *nv10_render = nv10_vbuf_render(render);
|
||||
struct nv10_context *nv10 = nv10_render->nv10;
|
||||
struct pipe_winsys *winsys = nv10->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv10->pipe.screen;
|
||||
|
||||
assert(!nv10_render->buffer);
|
||||
winsys->buffer_unmap(winsys, nv10_render->buffer);
|
||||
pipe_buffer_unmap(pscreen, nv10_render->buffer);
|
||||
}
|
||||
|
||||
static boolean
|
||||
@@ -202,8 +200,6 @@ static void
|
||||
nv10_vbuf_render_release_vertices( struct vbuf_render *render )
|
||||
{
|
||||
struct nv10_vbuf_render *nv10_render = nv10_vbuf_render(render);
|
||||
struct nv10_context *nv10 = nv10_render->nv10;
|
||||
struct pipe_screen *pscreen = &nv10->screen->base.base;
|
||||
|
||||
assert(nv10_render->buffer);
|
||||
pipe_buffer_reference(&nv10_render->buffer, NULL);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
|
||||
@@ -460,7 +461,7 @@ nv10_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
const struct pipe_constant_buffer *buf )
|
||||
{
|
||||
struct nv10_context *nv10 = nv10_context(pipe);
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
|
||||
assert(shader < PIPE_SHADER_TYPES);
|
||||
assert(index == 0);
|
||||
@@ -468,12 +469,12 @@ nv10_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
if (buf) {
|
||||
void *mapped;
|
||||
if (buf->buffer && buf->buffer->size &&
|
||||
(mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
|
||||
(mapped = pipe_buffer_map(pscreen, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
|
||||
{
|
||||
memcpy(nv10->constbuf[shader], mapped, buf->buffer->size);
|
||||
nv10->constbuf_nr[shader] =
|
||||
buf->buffer->size / (4 * sizeof(float));
|
||||
ws->buffer_unmap(ws, buf->buffer);
|
||||
pipe_buffer_unmap(pscreen, buf->buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "draw/draw_context.h"
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "nv10_context.h"
|
||||
#include "nv10_state.h"
|
||||
@@ -15,6 +16,7 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
|
||||
{
|
||||
struct nv10_context *nv10 = nv10_context( pipe );
|
||||
struct draw_context *draw = nv10->draw;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
unsigned i;
|
||||
|
||||
nv10_emit_hw_state(nv10);
|
||||
@@ -24,9 +26,8 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
|
||||
*/
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
if (nv10->vtxbuf[i].buffer) {
|
||||
void *buf
|
||||
= pipe->winsys->buffer_map(pipe->winsys,
|
||||
nv10->vtxbuf[i].buffer,
|
||||
void *buf =
|
||||
pipe_buffer_map(pscreen, nv10->vtxbuf[i].buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_vertex_buffer(draw, i, buf);
|
||||
}
|
||||
@@ -34,8 +35,8 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
|
||||
/* Map index buffer, if present */
|
||||
if (indexBuffer) {
|
||||
void *mapped_indexes
|
||||
= pipe->winsys->buffer_map(pipe->winsys, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
= pipe_buffer_map(pscreen, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
|
||||
}
|
||||
else {
|
||||
@@ -55,12 +56,12 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
|
||||
*/
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
if (nv10->vtxbuf[i].buffer) {
|
||||
pipe->winsys->buffer_unmap(pipe->winsys, nv10->vtxbuf[i].buffer);
|
||||
pipe_buffer_unmap(pscreen, nv10->vtxbuf[i].buffer);
|
||||
draw_set_mapped_vertex_buffer(draw, i, NULL);
|
||||
}
|
||||
}
|
||||
if (indexBuffer) {
|
||||
pipe->winsys->buffer_unmap(pipe->winsys, indexBuffer);
|
||||
pipe_buffer_unmap(pscreen, indexBuffer);
|
||||
draw_set_mapped_element_buffer(draw, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -152,12 +152,11 @@ static void *
|
||||
nv20_vbuf_render_map_vertices( struct vbuf_render *render )
|
||||
{
|
||||
struct nv20_vbuf_render *nv20_render = nv20_vbuf_render(render);
|
||||
struct pipe_winsys *winsys = nv20_render->nv20->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv20_render->nv20->pipe.screen;
|
||||
|
||||
if (nv20_render->pbuffer) {
|
||||
return winsys->buffer_map(winsys,
|
||||
nv20_render->pbuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
return pipe_buffer_map(pscreen, nv20_render->pbuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
} else if (nv20_render->mbuffer) {
|
||||
return nv20_render->mbuffer;
|
||||
} else
|
||||
@@ -173,10 +172,10 @@ nv20_vbuf_render_unmap_vertices( struct vbuf_render *render,
|
||||
ushort max_index )
|
||||
{
|
||||
struct nv20_vbuf_render *nv20_render = nv20_vbuf_render(render);
|
||||
struct pipe_winsys *winsys = nv20_render->nv20->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv20_render->nv20->pipe.screen;
|
||||
|
||||
if (nv20_render->pbuffer)
|
||||
winsys->buffer_unmap(winsys, nv20_render->pbuffer);
|
||||
pipe_buffer_unmap(pscreen, nv20_render->pbuffer);
|
||||
}
|
||||
|
||||
static boolean
|
||||
@@ -358,7 +357,6 @@ nv20_vbuf_render_release_vertices( struct vbuf_render *render )
|
||||
{
|
||||
struct nv20_vbuf_render *nv20_render = nv20_vbuf_render(render);
|
||||
struct nv20_context *nv20 = nv20_render->nv20;
|
||||
struct pipe_screen *pscreen = &nv20->screen->base.base;
|
||||
|
||||
if (nv20_render->pbuffer) {
|
||||
pipe_buffer_reference(&nv20_render->pbuffer, NULL);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
|
||||
@@ -453,7 +454,7 @@ nv20_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
const struct pipe_constant_buffer *buf )
|
||||
{
|
||||
struct nv20_context *nv20 = nv20_context(pipe);
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
|
||||
assert(shader < PIPE_SHADER_TYPES);
|
||||
assert(index == 0);
|
||||
@@ -461,12 +462,12 @@ nv20_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
||||
if (buf) {
|
||||
void *mapped;
|
||||
if (buf->buffer && buf->buffer->size &&
|
||||
(mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
|
||||
(mapped = pipe_buffer_map(pscreen, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
|
||||
{
|
||||
memcpy(nv20->constbuf[shader], mapped, buf->buffer->size);
|
||||
nv20->constbuf_nr[shader] =
|
||||
buf->buffer->size / (4 * sizeof(float));
|
||||
ws->buffer_unmap(ws, buf->buffer);
|
||||
pipe_buffer_unmap(pscreen, buf->buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "draw/draw_context.h"
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "nv20_context.h"
|
||||
#include "nv20_state.h"
|
||||
@@ -13,6 +14,7 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
|
||||
unsigned indexSize,
|
||||
unsigned prim, unsigned start, unsigned count)
|
||||
{
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
struct nv20_context *nv20 = nv20_context( pipe );
|
||||
struct draw_context *draw = nv20->draw;
|
||||
unsigned i;
|
||||
@@ -25,17 +27,17 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
if (nv20->vtxbuf[i].buffer) {
|
||||
void *buf
|
||||
= pipe->winsys->buffer_map(pipe->winsys,
|
||||
nv20->vtxbuf[i].buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
= pipe_buffer_map(pscreen,
|
||||
nv20->vtxbuf[i].buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_vertex_buffer(draw, i, buf);
|
||||
}
|
||||
}
|
||||
/* Map index buffer, if present */
|
||||
if (indexBuffer) {
|
||||
void *mapped_indexes
|
||||
= pipe->winsys->buffer_map(pipe->winsys, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
= pipe_buffer_map(pscreen, indexBuffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
|
||||
}
|
||||
else {
|
||||
@@ -55,12 +57,12 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
|
||||
*/
|
||||
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
|
||||
if (nv20->vtxbuf[i].buffer) {
|
||||
pipe->winsys->buffer_unmap(pipe->winsys, nv20->vtxbuf[i].buffer);
|
||||
pipe_buffer_unmap(pscreen, nv20->vtxbuf[i].buffer);
|
||||
draw_set_mapped_vertex_buffer(draw, i, NULL);
|
||||
}
|
||||
}
|
||||
if (indexBuffer) {
|
||||
pipe->winsys->buffer_unmap(pipe->winsys, indexBuffer);
|
||||
pipe_buffer_unmap(pscreen, indexBuffer);
|
||||
draw_set_mapped_element_buffer(draw, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
@@ -645,8 +646,8 @@ out_err:
|
||||
static boolean
|
||||
nv20_vertprog_validate(struct nv20_context *nv20)
|
||||
{
|
||||
struct pipe_screen *pscreen = nv20->pipe.screen;
|
||||
struct nouveau_winsys *nvws = nv20->nvws;
|
||||
struct pipe_winsys *ws = nv20->pipe.winsys;
|
||||
struct nouveau_grobj *rankine = nv20->screen->rankine;
|
||||
struct nv20_vertex_program *vp;
|
||||
struct pipe_buffer *constbuf;
|
||||
@@ -749,8 +750,8 @@ nv20_vertprog_validate(struct nv20_context *nv20)
|
||||
float *map = NULL;
|
||||
|
||||
if (constbuf) {
|
||||
map = ws->buffer_map(ws, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
}
|
||||
|
||||
for (i = 0; i < vp->nr_consts; i++) {
|
||||
@@ -770,9 +771,8 @@ nv20_vertprog_validate(struct nv20_context *nv20)
|
||||
OUT_RINGp ((uint32_t *)vpd->value, 4);
|
||||
}
|
||||
|
||||
if (constbuf) {
|
||||
ws->buffer_unmap(ws, constbuf);
|
||||
}
|
||||
if (constbuf)
|
||||
pipe_buffer_unmap(pscreen, constbuf);
|
||||
}
|
||||
|
||||
/* Upload vtxprog */
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
@@ -798,12 +799,12 @@ static void
|
||||
nv30_fragprog_upload(struct nv30_context *nv30,
|
||||
struct nv30_fragment_program *fp)
|
||||
{
|
||||
struct pipe_winsys *ws = nv30->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv30->pipe.screen;
|
||||
const uint32_t le = 1;
|
||||
uint32_t *map;
|
||||
int i;
|
||||
|
||||
map = ws->buffer_map(ws, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
map = pipe_buffer_map(pscreen, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
|
||||
#if 0
|
||||
for (i = 0; i < fp->insn_len; i++) {
|
||||
@@ -825,7 +826,7 @@ nv30_fragprog_upload(struct nv30_context *nv30,
|
||||
}
|
||||
}
|
||||
|
||||
ws->buffer_unmap(ws, fp->buffer);
|
||||
pipe_buffer_unmap(pscreen, fp->buffer);
|
||||
}
|
||||
|
||||
static boolean
|
||||
@@ -834,8 +835,7 @@ nv30_fragprog_validate(struct nv30_context *nv30)
|
||||
struct nv30_fragment_program *fp = nv30->fragprog;
|
||||
struct pipe_buffer *constbuf =
|
||||
nv30->constbuf[PIPE_SHADER_FRAGMENT];
|
||||
struct pipe_screen *screen = nv30->pipe.screen;
|
||||
struct pipe_winsys *ws = nv30->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv30->pipe.screen;
|
||||
struct nouveau_stateobj *so;
|
||||
boolean new_consts = FALSE;
|
||||
int i;
|
||||
@@ -850,7 +850,7 @@ nv30_fragprog_validate(struct nv30_context *nv30)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
fp->buffer = screen->buffer_create(screen, 0x100, 0, fp->insn_len * 4);
|
||||
fp->buffer = pscreen->buffer_create(pscreen, 0x100, 0, fp->insn_len * 4);
|
||||
nv30_fragprog_upload(nv30, fp);
|
||||
|
||||
so = so_new(8, 1);
|
||||
@@ -872,7 +872,8 @@ update_constants:
|
||||
if (fp->nr_consts) {
|
||||
float *map;
|
||||
|
||||
map = ws->buffer_map(ws, constbuf, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
for (i = 0; i < fp->nr_consts; i++) {
|
||||
struct nv30_fragment_program_data *fpd = &fp->consts[i];
|
||||
uint32_t *p = &fp->insn[fpd->offset];
|
||||
@@ -883,7 +884,7 @@ update_constants:
|
||||
memcpy(p, cb, 4 * sizeof(float));
|
||||
new_consts = TRUE;
|
||||
}
|
||||
ws->buffer_unmap(ws, constbuf);
|
||||
pipe_buffer_unmap(pscreen, constbuf);
|
||||
|
||||
if (new_consts)
|
||||
nv30_fragprog_upload(nv30, fp);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "nv30_context.h"
|
||||
#include "nv30_state.h"
|
||||
@@ -108,7 +109,7 @@ nv30_vbo_static_attrib(struct nv30_context *nv30, struct nouveau_stateobj *so,
|
||||
int attrib, struct pipe_vertex_element *ve,
|
||||
struct pipe_vertex_buffer *vb)
|
||||
{
|
||||
struct pipe_winsys *ws = nv30->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv30->pipe.screen;
|
||||
struct nouveau_grobj *rankine = nv30->screen->rankine;
|
||||
unsigned type, ncomp;
|
||||
void *map;
|
||||
@@ -116,7 +117,7 @@ nv30_vbo_static_attrib(struct nv30_context *nv30, struct nouveau_stateobj *so,
|
||||
if (nv30_vbo_format_to_hw(ve->src_format, &type, &ncomp))
|
||||
return FALSE;
|
||||
|
||||
map = ws->buffer_map(ws, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map += vb->buffer_offset + ve->src_offset;
|
||||
|
||||
switch (type) {
|
||||
@@ -148,18 +149,17 @@ nv30_vbo_static_attrib(struct nv30_context *nv30, struct nouveau_stateobj *so,
|
||||
so_data (so, fui(v[0]));
|
||||
break;
|
||||
default:
|
||||
ws->buffer_unmap(ws, vb->buffer);
|
||||
pipe_buffer_unmap(pscreen, vb->buffer);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ws->buffer_unmap(ws, vb->buffer);
|
||||
pipe_buffer_unmap(pscreen, vb->buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ws->buffer_unmap(ws, vb->buffer);
|
||||
|
||||
pipe_buffer_unmap(pscreen, vb->buffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -368,10 +368,10 @@ nv30_draw_elements_inline(struct pipe_context *pipe,
|
||||
unsigned mode, unsigned start, unsigned count)
|
||||
{
|
||||
struct nv30_context *nv30 = nv30_context(pipe);
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
void *map;
|
||||
|
||||
map = ws->buffer_map(ws, ib, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, ib, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
if (!ib) {
|
||||
NOUVEAU_ERR("failed mapping ib\n");
|
||||
return FALSE;
|
||||
@@ -392,7 +392,7 @@ nv30_draw_elements_inline(struct pipe_context *pipe,
|
||||
break;
|
||||
}
|
||||
|
||||
ws->buffer_unmap(ws, ib);
|
||||
pipe_buffer_unmap(pscreen, ib);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
@@ -645,7 +646,7 @@ out_err:
|
||||
static boolean
|
||||
nv30_vertprog_validate(struct nv30_context *nv30)
|
||||
{
|
||||
struct pipe_winsys *ws = nv30->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv30->pipe.screen;
|
||||
struct nouveau_grobj *rankine = nv30->screen->rankine;
|
||||
struct nv30_vertex_program *vp;
|
||||
struct pipe_buffer *constbuf;
|
||||
@@ -750,8 +751,8 @@ nv30_vertprog_validate(struct nv30_context *nv30)
|
||||
float *map = NULL;
|
||||
|
||||
if (constbuf) {
|
||||
map = ws->buffer_map(ws, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
}
|
||||
|
||||
for (i = 0; i < vp->nr_consts; i++) {
|
||||
@@ -771,9 +772,8 @@ nv30_vertprog_validate(struct nv30_context *nv30)
|
||||
OUT_RINGp ((uint32_t *)vpd->value, 4);
|
||||
}
|
||||
|
||||
if (constbuf) {
|
||||
ws->buffer_unmap(ws, constbuf);
|
||||
}
|
||||
if (constbuf)
|
||||
pipe_buffer_unmap(pscreen, constbuf);
|
||||
}
|
||||
|
||||
/* Upload vtxprog */
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "util/u_pack_color.h"
|
||||
|
||||
@@ -231,7 +232,7 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
|
||||
unsigned mode, unsigned start, unsigned count)
|
||||
{
|
||||
struct nv40_context *nv40 = nv40_context(pipe);
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
unsigned i;
|
||||
void *map;
|
||||
|
||||
@@ -241,13 +242,14 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
|
||||
nv40_state_emit(nv40);
|
||||
|
||||
for (i = 0; i < nv40->vtxbuf_nr; i++) {
|
||||
map = ws->buffer_map(ws, nv40->vtxbuf[i].buffer,
|
||||
map = pipe_buffer_map(pscreen, nv40->vtxbuf[i].buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_vertex_buffer(nv40->draw, i, map);
|
||||
}
|
||||
|
||||
if (idxbuf) {
|
||||
map = ws->buffer_map(ws, idxbuf, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, idxbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_element_buffer(nv40->draw, idxbuf_size, map);
|
||||
} else {
|
||||
draw_set_mapped_element_buffer(nv40->draw, 0, NULL);
|
||||
@@ -256,21 +258,22 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
|
||||
if (nv40->constbuf[PIPE_SHADER_VERTEX]) {
|
||||
const unsigned nr = nv40->constbuf_nr[PIPE_SHADER_VERTEX];
|
||||
|
||||
map = ws->buffer_map(ws, nv40->constbuf[PIPE_SHADER_VERTEX],
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen,
|
||||
nv40->constbuf[PIPE_SHADER_VERTEX],
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
draw_set_mapped_constant_buffer(nv40->draw, map, nr);
|
||||
}
|
||||
|
||||
draw_arrays(nv40->draw, mode, start, count);
|
||||
|
||||
for (i = 0; i < nv40->vtxbuf_nr; i++)
|
||||
ws->buffer_unmap(ws, nv40->vtxbuf[i].buffer);
|
||||
pipe_buffer_unmap(pscreen, nv40->vtxbuf[i].buffer);
|
||||
|
||||
if (idxbuf)
|
||||
ws->buffer_unmap(ws, idxbuf);
|
||||
pipe_buffer_unmap(pscreen, idxbuf);
|
||||
|
||||
if (nv40->constbuf[PIPE_SHADER_VERTEX])
|
||||
ws->buffer_unmap(ws, nv40->constbuf[PIPE_SHADER_VERTEX]);
|
||||
pipe_buffer_unmap(pscreen, nv40->constbuf[PIPE_SHADER_VERTEX]);
|
||||
|
||||
draw_flush(nv40->draw);
|
||||
pipe->flush(pipe, 0, NULL);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
@@ -881,12 +882,12 @@ static void
|
||||
nv40_fragprog_upload(struct nv40_context *nv40,
|
||||
struct nv40_fragment_program *fp)
|
||||
{
|
||||
struct pipe_winsys *ws = nv40->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv40->pipe.screen;
|
||||
const uint32_t le = 1;
|
||||
uint32_t *map;
|
||||
int i;
|
||||
|
||||
map = ws->buffer_map(ws, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
map = pipe_buffer_map(pscreen, fp->buffer, PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
|
||||
#if 0
|
||||
for (i = 0; i < fp->insn_len; i++) {
|
||||
@@ -908,7 +909,7 @@ nv40_fragprog_upload(struct nv40_context *nv40,
|
||||
}
|
||||
}
|
||||
|
||||
ws->buffer_unmap(ws, fp->buffer);
|
||||
pipe_buffer_unmap(pscreen, fp->buffer);
|
||||
}
|
||||
|
||||
static boolean
|
||||
@@ -917,8 +918,7 @@ nv40_fragprog_validate(struct nv40_context *nv40)
|
||||
struct nv40_fragment_program *fp = nv40->fragprog;
|
||||
struct pipe_buffer *constbuf =
|
||||
nv40->constbuf[PIPE_SHADER_FRAGMENT];
|
||||
struct pipe_screen *screen = nv40->pipe.screen;
|
||||
struct pipe_winsys *ws = nv40->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv40->pipe.screen;
|
||||
struct nouveau_stateobj *so;
|
||||
boolean new_consts = FALSE;
|
||||
int i;
|
||||
@@ -933,7 +933,7 @@ nv40_fragprog_validate(struct nv40_context *nv40)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
fp->buffer = screen->buffer_create(screen, 0x100, 0, fp->insn_len * 4);
|
||||
fp->buffer = pscreen->buffer_create(pscreen, 0x100, 0, fp->insn_len * 4);
|
||||
nv40_fragprog_upload(nv40, fp);
|
||||
|
||||
so = so_new(4, 1);
|
||||
@@ -951,7 +951,8 @@ update_constants:
|
||||
if (fp->nr_consts) {
|
||||
float *map;
|
||||
|
||||
map = ws->buffer_map(ws, constbuf, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
for (i = 0; i < fp->nr_consts; i++) {
|
||||
struct nv40_fragment_program_data *fpd = &fp->consts[i];
|
||||
uint32_t *p = &fp->insn[fpd->offset];
|
||||
@@ -962,7 +963,7 @@ update_constants:
|
||||
memcpy(p, cb, 4 * sizeof(float));
|
||||
new_consts = TRUE;
|
||||
}
|
||||
ws->buffer_unmap(ws, constbuf);
|
||||
pipe_buffer_unmap(pscreen, constbuf);
|
||||
|
||||
if (new_consts)
|
||||
nv40_fragprog_upload(nv40, fp);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "nv40_context.h"
|
||||
#include "nv40_state.h"
|
||||
@@ -108,7 +109,7 @@ nv40_vbo_static_attrib(struct nv40_context *nv40, struct nouveau_stateobj *so,
|
||||
int attrib, struct pipe_vertex_element *ve,
|
||||
struct pipe_vertex_buffer *vb)
|
||||
{
|
||||
struct pipe_winsys *ws = nv40->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv40->pipe.screen;
|
||||
struct nouveau_grobj *curie = nv40->screen->curie;
|
||||
unsigned type, ncomp;
|
||||
void *map;
|
||||
@@ -116,7 +117,7 @@ nv40_vbo_static_attrib(struct nv40_context *nv40, struct nouveau_stateobj *so,
|
||||
if (nv40_vbo_format_to_hw(ve->src_format, &type, &ncomp))
|
||||
return FALSE;
|
||||
|
||||
map = ws->buffer_map(ws, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, vb->buffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map += vb->buffer_offset + ve->src_offset;
|
||||
|
||||
switch (type) {
|
||||
@@ -148,17 +149,17 @@ nv40_vbo_static_attrib(struct nv40_context *nv40, struct nouveau_stateobj *so,
|
||||
so_data (so, fui(v[0]));
|
||||
break;
|
||||
default:
|
||||
ws->buffer_unmap(ws, vb->buffer);
|
||||
pipe_buffer_unmap(pscreen, vb->buffer);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ws->buffer_unmap(ws, vb->buffer);
|
||||
pipe_buffer_unmap(pscreen, vb->buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ws->buffer_unmap(ws, vb->buffer);
|
||||
pipe_buffer_unmap(pscreen, vb->buffer);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -367,10 +368,10 @@ nv40_draw_elements_inline(struct pipe_context *pipe,
|
||||
unsigned mode, unsigned start, unsigned count)
|
||||
{
|
||||
struct nv40_context *nv40 = nv40_context(pipe);
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
void *map;
|
||||
|
||||
map = ws->buffer_map(ws, ib, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, ib, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
if (!ib) {
|
||||
NOUVEAU_ERR("failed mapping ib\n");
|
||||
return FALSE;
|
||||
@@ -391,7 +392,7 @@ nv40_draw_elements_inline(struct pipe_context *pipe,
|
||||
break;
|
||||
}
|
||||
|
||||
ws->buffer_unmap(ws, ib);
|
||||
pipe_buffer_unmap(pscreen, ib);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "tgsi/tgsi_parse.h"
|
||||
@@ -855,7 +856,7 @@ out_err:
|
||||
static boolean
|
||||
nv40_vertprog_validate(struct nv40_context *nv40)
|
||||
{
|
||||
struct pipe_winsys *ws = nv40->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv40->pipe.screen;
|
||||
struct nouveau_grobj *curie = nv40->screen->curie;
|
||||
struct nv40_vertex_program *vp;
|
||||
struct pipe_buffer *constbuf;
|
||||
@@ -980,8 +981,8 @@ check_gpu_resources:
|
||||
float *map = NULL;
|
||||
|
||||
if (constbuf) {
|
||||
map = ws->buffer_map(ws, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
map = pipe_buffer_map(pscreen, constbuf,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
}
|
||||
|
||||
for (i = 0; i < vp->nr_consts; i++) {
|
||||
@@ -1002,7 +1003,7 @@ check_gpu_resources:
|
||||
}
|
||||
|
||||
if (constbuf)
|
||||
ws->buffer_unmap(ws, constbuf);
|
||||
pscreen->buffer_unmap(pscreen, constbuf);
|
||||
}
|
||||
|
||||
/* Upload vtxprog */
|
||||
|
||||
@@ -2235,7 +2235,7 @@ nv50_program_upload_data(struct nv50_context *nv50, float *map,
|
||||
static void
|
||||
nv50_program_validate_data(struct nv50_context *nv50, struct nv50_program *p)
|
||||
{
|
||||
struct pipe_winsys *ws = nv50->pipe.winsys;
|
||||
struct pipe_screen *pscreen = nv50->pipe.screen;
|
||||
|
||||
if (!p->data[0] && p->immd_nr) {
|
||||
struct nouveau_resource *heap = nv50->screen->immd_heap[0];
|
||||
@@ -2274,13 +2274,13 @@ nv50_program_validate_data(struct nv50_context *nv50, struct nv50_program *p)
|
||||
|
||||
if (p->param_nr) {
|
||||
unsigned cbuf = NV50_CB_PVP;
|
||||
float *map = ws->buffer_map(ws, nv50->constbuf[p->type],
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
float *map = pipe_buffer_map(pscreen, nv50->constbuf[p->type],
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
if (p->type == PIPE_SHADER_FRAGMENT)
|
||||
cbuf = NV50_CB_PFP;
|
||||
nv50_program_upload_data(nv50, map, p->data[1]->start,
|
||||
p->param_nr, cbuf);
|
||||
ws->buffer_unmap(ws, nv50->constbuf[p->type]);
|
||||
pipe_buffer_unmap(pscreen, nv50->constbuf[p->type]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ static boolean
|
||||
nv50_query_result(struct pipe_context *pipe, struct pipe_query *pq,
|
||||
boolean wait, uint64_t *result)
|
||||
{
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
struct nv50_query *q = nv50_query(pq);
|
||||
|
||||
/*XXX: Want to be able to return FALSE here instead of blocking
|
||||
@@ -113,11 +113,11 @@ nv50_query_result(struct pipe_context *pipe, struct pipe_query *pq,
|
||||
*/
|
||||
|
||||
if (!q->ready) {
|
||||
uint32_t *map = ws->buffer_map(ws, q->buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
uint32_t *map = pipe_buffer_map(pscreen, q->buffer,
|
||||
PIPE_BUFFER_USAGE_CPU_READ);
|
||||
q->result = map[1];
|
||||
q->ready = TRUE;
|
||||
ws->buffer_unmap(ws, q->buffer);
|
||||
pipe_buffer_unmap(pscreen, q->buffer);
|
||||
}
|
||||
|
||||
*result = q->result;
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_inlines.h"
|
||||
|
||||
#include "nv50_context.h"
|
||||
|
||||
@@ -165,8 +166,10 @@ nv50_draw_elements(struct pipe_context *pipe,
|
||||
struct nv50_context *nv50 = nv50_context(pipe);
|
||||
struct nouveau_channel *chan = nv50->screen->tesla->channel;
|
||||
struct nouveau_grobj *tesla = nv50->screen->tesla;
|
||||
struct pipe_winsys *ws = pipe->winsys;
|
||||
void *map = ws->buffer_map(ws, indexBuffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
struct pipe_screen *pscreen = pipe->screen;
|
||||
void *map;
|
||||
|
||||
map = pipe_buffer_map(pscreen, indexBuffer, PIPE_BUFFER_USAGE_CPU_READ);
|
||||
|
||||
nv50_state_validate(nv50);
|
||||
|
||||
@@ -193,6 +196,7 @@ nv50_draw_elements(struct pipe_context *pipe,
|
||||
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
|
||||
OUT_RING (chan, 0);
|
||||
|
||||
pipe_buffer_unmap(pscreen, indexBuffer);
|
||||
pipe->flush(pipe, 0, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,7 @@ include $(TOP)/configs/current
|
||||
|
||||
LIBNAME = nouveaudrm
|
||||
|
||||
C_SOURCES = nouveau_drm_api.c \
|
||||
nouveau_winsys_pipe.c
|
||||
C_SOURCES = nouveau_drm_api.c
|
||||
|
||||
LIBRARY_INCLUDES = $(shell pkg-config libdrm libdrm_nouveau --cflags-only-I)
|
||||
LIBRARY_DEFINES = $(shell pkg-config libdrm libdrm_nouveau --cflags-only-other)
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "util/u_memory.h"
|
||||
|
||||
#include "nouveau_drm_api.h"
|
||||
#include "nouveau_winsys_pipe.h"
|
||||
|
||||
#include "nouveau_drmif.h"
|
||||
#include "nouveau_channel.h"
|
||||
#include "nouveau_bo.h"
|
||||
|
||||
#include "nouveau/nouveau_winsys.h"
|
||||
#include "nouveau/nouveau_screen.h"
|
||||
|
||||
static struct pipe_surface *
|
||||
dri_surface_from_handle(struct pipe_screen *screen,
|
||||
unsigned handle,
|
||||
@@ -58,7 +62,7 @@ dri_surface_from_handle(struct pipe_screen *screen,
|
||||
static struct pipe_surface *
|
||||
nouveau_dri1_front_surface(struct pipe_context *pipe)
|
||||
{
|
||||
return nouveau_screen(pipe->screen)->front;
|
||||
return nouveau_winsys_screen(pipe->screen)->front;
|
||||
}
|
||||
|
||||
static struct dri1_api nouveau_dri1_api = {
|
||||
@@ -69,6 +73,7 @@ static struct pipe_screen *
|
||||
nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
|
||||
{
|
||||
struct dri1_create_screen_arg *dri1 = (void *)arg;
|
||||
struct nouveau_winsys *nvws;
|
||||
struct pipe_winsys *ws;
|
||||
struct nouveau_device *dev = NULL;
|
||||
struct pipe_screen *(*init)(struct pipe_winsys *,
|
||||
@@ -107,20 +112,20 @@ nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ws = nouveau_pipe_winsys_new(dev);
|
||||
if (!ws) {
|
||||
nvws = CALLOC_STRUCT(nouveau_winsys);
|
||||
if (!nvws) {
|
||||
nouveau_device_close(&dev);
|
||||
return NULL;
|
||||
}
|
||||
ws = &nvws->base;
|
||||
|
||||
nouveau_pipe_winsys(ws)->pscreen = init(ws, dev);
|
||||
if (!nouveau_pipe_winsys(ws)->pscreen) {
|
||||
nvws->pscreen = init(ws, dev);
|
||||
if (!nvws->pscreen) {
|
||||
ws->destroy(ws);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (arg->mode == DRM_CREATE_DRI1) {
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
|
||||
struct nouveau_dri *nvdri = dri1->ddx_info;
|
||||
enum pipe_format format;
|
||||
|
||||
@@ -129,14 +134,14 @@ nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
|
||||
else
|
||||
format = PIPE_FORMAT_A8R8G8B8_UNORM;
|
||||
|
||||
nvpws->front = dri_surface_from_handle(nvpws->pscreen,
|
||||
nvws->front = dri_surface_from_handle(nvws->pscreen,
|
||||
nvdri->front_offset,
|
||||
format,
|
||||
nvdri->width,
|
||||
nvdri->height,
|
||||
nvdri->front_pitch *
|
||||
(nvdri->bpp / 8));
|
||||
if (!nvpws->front) {
|
||||
if (!nvws->front) {
|
||||
debug_printf("%s: error referencing front buffer\n",
|
||||
__func__);
|
||||
ws->destroy(ws);
|
||||
@@ -146,15 +151,15 @@ nouveau_drm_create_screen(int fd, struct drm_create_screen_arg *arg)
|
||||
dri1->api = &nouveau_dri1_api;
|
||||
}
|
||||
|
||||
return nouveau_pipe_winsys(ws)->pscreen;
|
||||
return nvws->pscreen;
|
||||
}
|
||||
|
||||
static struct pipe_context *
|
||||
nouveau_drm_create_context(struct pipe_screen *pscreen)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_screen(pscreen);
|
||||
struct nouveau_winsys *nvws = nouveau_winsys_screen(pscreen);
|
||||
struct pipe_context *(*init)(struct pipe_screen *, unsigned);
|
||||
unsigned chipset = nvpws->channel->device->chipset;
|
||||
unsigned chipset = nouveau_screen(pscreen)->device->chipset;
|
||||
int i;
|
||||
|
||||
switch (chipset & 0xf0) {
|
||||
@@ -185,19 +190,19 @@ nouveau_drm_create_context(struct pipe_screen *pscreen)
|
||||
}
|
||||
|
||||
/* Find a free slot for a pipe context, allocate a new one if needed */
|
||||
for (i = 0; i < nvpws->nr_pctx; i++) {
|
||||
if (nvpws->pctx[i] == NULL)
|
||||
for (i = 0; i < nvws->nr_pctx; i++) {
|
||||
if (nvws->pctx[i] == NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == nvpws->nr_pctx) {
|
||||
nvpws->nr_pctx++;
|
||||
nvpws->pctx = realloc(nvpws->pctx,
|
||||
sizeof(*nvpws->pctx) * nvpws->nr_pctx);
|
||||
if (i == nvws->nr_pctx) {
|
||||
nvws->nr_pctx++;
|
||||
nvws->pctx = realloc(nvws->pctx,
|
||||
sizeof(*nvws->pctx) * nvws->nr_pctx);
|
||||
}
|
||||
|
||||
nvpws->pctx[i] = init(pscreen, i);
|
||||
return nvpws->pctx[i];
|
||||
nvws->pctx[i] = init(pscreen, i);
|
||||
return nvws->pctx[i];
|
||||
}
|
||||
|
||||
static boolean
|
||||
@@ -211,42 +216,41 @@ static struct pipe_buffer *
|
||||
nouveau_drm_pb_from_handle(struct pipe_screen *pscreen, const char *name,
|
||||
unsigned handle)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_screen(pscreen);
|
||||
struct nouveau_device *dev = nvpws->channel->device;
|
||||
struct nouveau_pipe_buffer *nvpb;
|
||||
struct nouveau_device *dev = nouveau_screen(pscreen)->device;
|
||||
struct pipe_buffer *pb;
|
||||
int ret;
|
||||
|
||||
nvpb = CALLOC_STRUCT(nouveau_pipe_buffer);
|
||||
if (!nvpb)
|
||||
pb = CALLOC(1, sizeof(struct pipe_buffer) + sizeof(struct nouveau_bo*));
|
||||
if (!pb)
|
||||
return NULL;
|
||||
|
||||
ret = nouveau_bo_handle_ref(dev, handle, &nvpb->bo);
|
||||
ret = nouveau_bo_handle_ref(dev, handle, (struct nouveau_bo**)(pb+1));
|
||||
if (ret) {
|
||||
debug_printf("%s: ref name 0x%08x failed with %d\n",
|
||||
__func__, handle, ret);
|
||||
FREE(nvpb);
|
||||
FREE(pb);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pipe_reference_init(&nvpb->base.reference, 1);
|
||||
nvpb->base.screen = pscreen;
|
||||
nvpb->base.alignment = 0;
|
||||
nvpb->base.usage = PIPE_BUFFER_USAGE_GPU_READ_WRITE |
|
||||
PIPE_BUFFER_USAGE_CPU_READ_WRITE;
|
||||
nvpb->base.size = nvpb->bo->size;
|
||||
return &nvpb->base;
|
||||
pipe_reference_init(&pb->reference, 1);
|
||||
pb->screen = pscreen;
|
||||
pb->alignment = 0;
|
||||
pb->usage = PIPE_BUFFER_USAGE_GPU_READ_WRITE |
|
||||
PIPE_BUFFER_USAGE_CPU_READ_WRITE;
|
||||
pb->size = nouveau_bo(pb)->size;
|
||||
return pb;
|
||||
}
|
||||
|
||||
static boolean
|
||||
nouveau_drm_handle_from_pb(struct pipe_screen *pscreen, struct pipe_buffer *pb,
|
||||
unsigned *handle)
|
||||
{
|
||||
struct nouveau_pipe_buffer *nvpb = nouveau_pipe_buffer(pb);
|
||||
struct nouveau_bo *bo = nouveau_bo(pb);
|
||||
|
||||
if (!nvpb)
|
||||
if (!bo)
|
||||
return FALSE;
|
||||
|
||||
*handle = nvpb->bo->handle;
|
||||
*handle = bo->handle;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -254,12 +258,12 @@ static boolean
|
||||
nouveau_drm_name_from_pb(struct pipe_screen *pscreen, struct pipe_buffer *pb,
|
||||
unsigned *handle)
|
||||
{
|
||||
struct nouveau_pipe_buffer *nvpb = nouveau_pipe_buffer(pb);
|
||||
struct nouveau_bo *bo = nouveau_bo(pb);
|
||||
|
||||
if (!nvpb)
|
||||
if (!bo)
|
||||
return FALSE;
|
||||
|
||||
return nouveau_bo_handle_get(nvpb->bo, handle) == 0;
|
||||
return nouveau_bo_handle_get(bo, handle) == 0;
|
||||
}
|
||||
|
||||
struct drm_api drm_api_hooks = {
|
||||
|
||||
@@ -1,7 +1,34 @@
|
||||
#ifndef __NOUVEAU_DRM_API_H__
|
||||
#define __NOUVEAU_DRM_API_H__
|
||||
|
||||
#include "state_tracker/drm_api.h"
|
||||
#include "state_tracker/dri1_api.h"
|
||||
|
||||
#include "pipe/internal/p_winsys_screen.h"
|
||||
|
||||
#include "nouveau_dri.h"
|
||||
|
||||
struct nouveau_winsys {
|
||||
struct pipe_winsys base;
|
||||
|
||||
struct pipe_screen *pscreen;
|
||||
|
||||
unsigned nr_pctx;
|
||||
struct pipe_context **pctx;
|
||||
|
||||
struct pipe_surface *front;
|
||||
};
|
||||
|
||||
static INLINE struct nouveau_winsys *
|
||||
nouveau_winsys(struct pipe_winsys *ws)
|
||||
{
|
||||
return (struct nouveau_winsys *)ws;
|
||||
}
|
||||
|
||||
static INLINE struct nouveau_winsys *
|
||||
nouveau_winsys_screen(struct pipe_screen *pscreen)
|
||||
{
|
||||
return nouveau_winsys(pscreen->winsys);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,205 +0,0 @@
|
||||
#include "pipe/internal/p_winsys_screen.h"
|
||||
#include <pipe/p_defines.h>
|
||||
#include <pipe/p_inlines.h>
|
||||
#include <util/u_memory.h>
|
||||
|
||||
#include "nouveau_winsys_pipe.h"
|
||||
|
||||
#include "nouveau_drmif.h"
|
||||
#include "nouveau_bo.h"
|
||||
|
||||
static const char *
|
||||
nouveau_get_name(struct pipe_winsys *pws)
|
||||
{
|
||||
return "Nouveau/DRI";
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
nouveau_flags_from_usage(struct pipe_winsys *ws, unsigned usage)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
|
||||
struct pipe_screen *pscreen = nvpws->pscreen;
|
||||
uint32_t flags = NOUVEAU_BO_LOCAL;
|
||||
|
||||
if (usage & NOUVEAU_BUFFER_USAGE_TRANSFER)
|
||||
flags |= NOUVEAU_BO_GART;
|
||||
|
||||
if (usage & PIPE_BUFFER_USAGE_PIXEL) {
|
||||
if (usage & NOUVEAU_BUFFER_USAGE_TEXTURE)
|
||||
flags |= NOUVEAU_BO_GART;
|
||||
if (!(usage & PIPE_BUFFER_USAGE_CPU_READ_WRITE))
|
||||
flags |= NOUVEAU_BO_VRAM;
|
||||
|
||||
switch (nvpws->channel->device->chipset & 0xf0) {
|
||||
case 0x50:
|
||||
case 0x80:
|
||||
case 0x90:
|
||||
flags |= NOUVEAU_BO_TILED;
|
||||
if (usage & NOUVEAU_BUFFER_USAGE_ZETA)
|
||||
flags |= NOUVEAU_BO_ZTILE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (usage & PIPE_BUFFER_USAGE_VERTEX) {
|
||||
if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_VTXBUF))
|
||||
flags |= NOUVEAU_BO_GART;
|
||||
}
|
||||
|
||||
if (usage & PIPE_BUFFER_USAGE_INDEX) {
|
||||
if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_IDXBUF))
|
||||
flags |= NOUVEAU_BO_GART;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static struct pipe_buffer *
|
||||
nouveau_pipe_bo_create(struct pipe_winsys *ws, unsigned alignment,
|
||||
unsigned usage, unsigned size)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
|
||||
struct nouveau_device *dev = nvpws->channel->device;
|
||||
struct nouveau_pipe_buffer *nvbuf;
|
||||
uint32_t flags;
|
||||
|
||||
nvbuf = CALLOC_STRUCT(nouveau_pipe_buffer);
|
||||
if (!nvbuf)
|
||||
return NULL;
|
||||
pipe_reference_init(&nvbuf->base.reference, 1);
|
||||
nvbuf->base.alignment = alignment;
|
||||
nvbuf->base.usage = usage;
|
||||
nvbuf->base.size = size;
|
||||
|
||||
flags = nouveau_flags_from_usage(ws, usage);
|
||||
flags |= NOUVEAU_BO_MAP;
|
||||
if (nouveau_bo_new(dev, flags, alignment, size, &nvbuf->bo)) {
|
||||
FREE(nvbuf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &nvbuf->base;
|
||||
}
|
||||
|
||||
static struct pipe_buffer *
|
||||
nouveau_pipe_bo_user_create(struct pipe_winsys *ws, void *ptr, unsigned bytes)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
|
||||
struct nouveau_device *dev = nvpws->channel->device;
|
||||
struct nouveau_pipe_buffer *nvbuf;
|
||||
|
||||
nvbuf = CALLOC_STRUCT(nouveau_pipe_buffer);
|
||||
if (!nvbuf)
|
||||
return NULL;
|
||||
pipe_reference_init(&nvbuf->base.reference, 1);
|
||||
nvbuf->base.size = bytes;
|
||||
|
||||
if (nouveau_bo_user(dev, ptr, bytes, &nvbuf->bo)) {
|
||||
FREE(nvbuf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return &nvbuf->base;
|
||||
}
|
||||
|
||||
static void
|
||||
nouveau_pipe_bo_del(struct pipe_buffer *buf)
|
||||
{
|
||||
struct nouveau_pipe_buffer *nvbuf = nouveau_pipe_buffer(buf);
|
||||
|
||||
nouveau_bo_ref(NULL, &nvbuf->bo);
|
||||
FREE(nvbuf);
|
||||
}
|
||||
|
||||
static void *
|
||||
nouveau_pipe_bo_map(struct pipe_winsys *pws, struct pipe_buffer *buf,
|
||||
unsigned flags)
|
||||
{
|
||||
struct nouveau_pipe_buffer *nvbuf = nouveau_pipe_buffer(buf);
|
||||
uint32_t map_flags = 0;
|
||||
|
||||
if (flags & PIPE_BUFFER_USAGE_CPU_READ)
|
||||
map_flags |= NOUVEAU_BO_RD;
|
||||
if (flags & PIPE_BUFFER_USAGE_CPU_WRITE)
|
||||
map_flags |= NOUVEAU_BO_WR;
|
||||
|
||||
if (nouveau_bo_map(nvbuf->bo, map_flags))
|
||||
return NULL;
|
||||
return nvbuf->bo->map;
|
||||
}
|
||||
|
||||
static void
|
||||
nouveau_pipe_bo_unmap(struct pipe_winsys *pws, struct pipe_buffer *buf)
|
||||
{
|
||||
struct nouveau_pipe_buffer *nvbuf = nouveau_pipe_buffer(buf);
|
||||
|
||||
nouveau_bo_unmap(nvbuf->bo);
|
||||
}
|
||||
|
||||
static void
|
||||
nouveau_pipe_fence_reference(struct pipe_winsys *ws,
|
||||
struct pipe_fence_handle **ptr,
|
||||
struct pipe_fence_handle *pfence)
|
||||
{
|
||||
*ptr = pfence;
|
||||
}
|
||||
|
||||
static int
|
||||
nouveau_pipe_fence_signalled(struct pipe_winsys *ws,
|
||||
struct pipe_fence_handle *pfence, unsigned flag)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
nouveau_pipe_fence_finish(struct pipe_winsys *ws,
|
||||
struct pipe_fence_handle *pfence, unsigned flag)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nouveau_destroy(struct pipe_winsys *ws)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws = nouveau_pipe_winsys(ws);
|
||||
|
||||
nouveau_device_close(&nvpws->channel->device);
|
||||
FREE(nvpws);
|
||||
}
|
||||
|
||||
struct pipe_winsys *
|
||||
nouveau_pipe_winsys_new(struct nouveau_device *dev)
|
||||
{
|
||||
struct nouveau_pipe_winsys *nvpws;
|
||||
int ret;
|
||||
|
||||
nvpws = CALLOC_STRUCT(nouveau_pipe_winsys);
|
||||
if (!nvpws)
|
||||
return NULL;
|
||||
|
||||
ret = nouveau_channel_alloc(dev, 0xbeef0201, 0xbeef0202,
|
||||
&nvpws->channel);
|
||||
if (ret) {
|
||||
debug_printf("%s: error opening GPU channel: %d\n",
|
||||
__func__, ret);
|
||||
FREE(nvpws);
|
||||
return NULL;
|
||||
}
|
||||
nvpws->next_handle = 0x77000000;
|
||||
|
||||
nvpws->base.buffer_create = nouveau_pipe_bo_create;
|
||||
nvpws->base.buffer_destroy = nouveau_pipe_bo_del;
|
||||
nvpws->base.user_buffer_create = nouveau_pipe_bo_user_create;
|
||||
nvpws->base.buffer_map = nouveau_pipe_bo_map;
|
||||
nvpws->base.buffer_unmap = nouveau_pipe_bo_unmap;
|
||||
|
||||
nvpws->base.fence_reference = nouveau_pipe_fence_reference;
|
||||
nvpws->base.fence_signalled = nouveau_pipe_fence_signalled;
|
||||
nvpws->base.fence_finish = nouveau_pipe_fence_finish;
|
||||
|
||||
nvpws->base.get_name = nouveau_get_name;
|
||||
nvpws->base.destroy = nouveau_destroy;
|
||||
return &nvpws->base;
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
#ifndef NOUVEAU_PIPE_WINSYS_H
|
||||
#define NOUVEAU_PIPE_WINSYS_H
|
||||
|
||||
#include "pipe/internal/p_winsys_screen.h"
|
||||
#include "pipe/p_context.h"
|
||||
|
||||
#include "nouveau/nouveau_winsys.h"
|
||||
|
||||
#include "nouveau_device.h"
|
||||
|
||||
struct nouveau_pipe_buffer {
|
||||
struct pipe_buffer base;
|
||||
struct nouveau_bo *bo;
|
||||
};
|
||||
|
||||
static INLINE struct nouveau_pipe_buffer *
|
||||
nouveau_pipe_buffer(struct pipe_buffer *buf)
|
||||
{
|
||||
return (struct nouveau_pipe_buffer *)buf;
|
||||
}
|
||||
|
||||
struct nouveau_pipe_winsys {
|
||||
struct pipe_winsys base;
|
||||
|
||||
struct pipe_screen *pscreen;
|
||||
|
||||
struct nouveau_channel *channel;
|
||||
uint32_t next_handle;
|
||||
|
||||
unsigned nr_pctx;
|
||||
struct pipe_context **pctx;
|
||||
|
||||
struct pipe_surface *front;
|
||||
};
|
||||
|
||||
static INLINE struct nouveau_pipe_winsys *
|
||||
nouveau_pipe_winsys(struct pipe_winsys *ws)
|
||||
{
|
||||
return (struct nouveau_pipe_winsys *)ws;
|
||||
}
|
||||
|
||||
static INLINE struct nouveau_pipe_winsys *
|
||||
nouveau_screen(struct pipe_screen *pscreen)
|
||||
{
|
||||
return nouveau_pipe_winsys(pscreen->winsys);
|
||||
}
|
||||
|
||||
struct pipe_winsys *
|
||||
nouveau_pipe_winsys_new(struct nouveau_device *);
|
||||
|
||||
struct nouveau_winsys *
|
||||
nouveau_winsys_new(struct pipe_winsys *ws);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user