boolean nvc0_compute_validate_program(struct nvc0_context *nvc0) { struct nvc0_program *prog = nvc0->compprog; if (prog->mem) return TRUE; if (!prog->translated) { prog->translated = nvc0_program_translate( prog, nvc0->screen->base.device->chipset); if (!prog->translated) return FALSE; } if (unlikely(!prog->code_size)) return FALSE; if (likely(prog->code_size)) { if (nvc0_program_upload_code(nvc0, prog)) { struct nouveau_pushbuf *push = nvc0->base.pushbuf; BEGIN_NVC0(push, NVC0_COMPUTE(FLUSH), 1); PUSH_DATA (push, NVC0_COMPUTE_FLUSH_CODE); return TRUE; } } return FALSE; }
static INLINE boolean nvc0_program_validate(struct nvc0_context *nvc0, struct nvc0_program *prog) { if (prog->res) return TRUE; if (!prog->translated) { prog->translated = nvc0_program_translate(prog); if (!prog->translated) return FALSE; } if (likely(prog->code_size)) return nvc0_program_upload_code(nvc0, prog); return TRUE; /* stream output info only */ }
static inline bool nvc0_program_validate(struct nvc0_context *nvc0, struct nvc0_program *prog) { if (prog->mem) return true; if (!prog->translated) { prog->translated = nvc0_program_translate( prog, nvc0->screen->base.device->chipset, &nvc0->base.debug); if (!prog->translated) return false; } if (likely(prog->code_size)) return nvc0_program_upload_code(nvc0, prog); return true; /* stream output info only */ }
static void * nvc0_cp_state_create(struct pipe_context *pipe, const struct pipe_compute_state *cso) { struct nvc0_program *prog; prog = CALLOC_STRUCT(nvc0_program); if (!prog) return NULL; prog->type = PIPE_SHADER_COMPUTE; prog->cp.smem_size = cso->req_local_mem; prog->cp.lmem_size = cso->req_private_mem; prog->parm_size = cso->req_input_mem; prog->pipe.tokens = tgsi_dup_tokens((const struct tgsi_token *)cso->prog); prog->translated = nvc0_program_translate( prog, nvc0_context(pipe)->screen->base.device->chipset, &nouveau_context(pipe)->debug); return (void *)prog; }
static void * nvc0_sp_state_create(struct pipe_context *pipe, const struct pipe_shader_state *cso, unsigned type) { struct nvc0_program *prog; prog = CALLOC_STRUCT(nvc0_program); if (!prog) return NULL; prog->type = type; if (cso->tokens) prog->pipe.tokens = tgsi_dup_tokens(cso->tokens); if (cso->stream_output.num_outputs) prog->pipe.stream_output = cso->stream_output; prog->translated = nvc0_program_translate( prog, nvc0_context(pipe)->screen->base.device->chipset, &nouveau_context(pipe)->debug); return (void *)prog; }