Lines Matching refs:variant

562 /** Search for a compiled shader variant with the same compile key */
567 struct svga_shader_variant *variant = shader->variants;
571 for ( ; variant; variant = variant->next) {
572 if (svga_compile_keys_equal(key, &variant->key))
573 return variant;
599 struct svga_shader_variant *variant,
610 variant->gb_shader = sws->shader_create(sws, variant->type,
611 variant->tokens, codeLen);
615 if (!variant->gb_shader)
618 ret = SVGA3D_BindGBShader(svga->swc, variant->gb_shader);
628 struct svga_shader_variant *variant,
633 unsigned len = codeLen + variant->signatureLen;
640 variant->id = util_bitmask_add(svga->shader_id_bm);
641 if (variant->id == UTIL_BITMASK_INVALID_INDEX) {
646 variant->gb_shader = swc->shader_create(swc,
647 variant->id, variant->type,
648 variant->tokens, codeLen,
649 variant->signature,
650 variant->signatureLen);
654 if (!variant->gb_shader) {
656 assert(variant->id != UTIL_BITMASK_INVALID_INDEX);
668 ret = SVGA3D_vgpu10_DefineAndBindShader(swc, variant->gb_shader,
669 variant->id, variant->type,
678 swc->shader_destroy(swc, variant->gb_shader);
679 variant->gb_shader = NULL;
682 util_bitmask_clear(svga->shader_id_bm, variant->id);
683 variant->id = UTIL_BITMASK_INVALID_INDEX;
690 * \param variant contains the shader tokens, etc. The result->id field will
695 struct svga_shader_variant *variant)
697 unsigned codeLen = variant->nr_tokens * sizeof(variant->tokens[0]);
702 variant->id = UTIL_BITMASK_INVALID_INDEX;
706 ret = define_gb_shader_vgpu10(svga, variant, codeLen);
708 ret = define_gb_shader_vgpu9(svga, variant, codeLen);
712 variant->id = util_bitmask_add(svga->shader_id_bm);
713 if (variant->id == UTIL_BITMASK_INVALID_INDEX) {
720 variant->id,
721 variant->type,
722 variant->tokens,
726 assert(variant->id != UTIL_BITMASK_INVALID_INDEX);
727 util_bitmask_clear(svga->shader_id_bm, variant->id);
728 variant->id = UTIL_BITMASK_INVALID_INDEX;
745 struct svga_shader_variant *variant)
748 unsigned id = variant ? variant->id : SVGA3D_INVALID_ID;
759 variant ? variant->gb_shader : NULL;
777 struct svga_shader_variant *variant;
781 variant = CALLOC(1, sizeof(struct svga_fs_variant));
784 variant = CALLOC(1, sizeof(struct svga_gs_variant));
787 variant = CALLOC(1, sizeof(struct svga_vs_variant));
790 variant = CALLOC(1, sizeof(struct svga_tes_variant));
793 variant = CALLOC(1, sizeof(struct svga_tcs_variant));
796 variant = CALLOC(1, sizeof(struct svga_cs_variant));
802 if (variant) {
803 variant->type = svga_shader_type(type);
806 return variant;
812 struct svga_shader_variant *variant)
814 if (svga_have_gb_objects(svga) && variant->gb_shader) {
817 swc->shader_destroy(swc, variant->gb_shader);
818 SVGA_RETRY(svga, SVGA3D_vgpu10_DestroyShader(svga->swc, variant->id));
819 util_bitmask_clear(svga->shader_id_bm, variant->id);
823 sws->shader_destroy(sws, variant->gb_shader);
825 variant->gb_shader = NULL;
828 if (variant->id != UTIL_BITMASK_INVALID_INDEX) {
829 SVGA_RETRY(svga, SVGA3D_DestroyShader(svga->swc, variant->id,
830 variant->type));
831 util_bitmask_clear(svga->shader_id_bm, variant->id);
835 FREE(variant->signature);
836 FREE((unsigned *)variant->tokens);
837 FREE(variant);
963 struct svga_shader_variant *variant = NULL;
967 variant = svga_tgsi_compile_shader(svga, shader, key);
973 if (variant == NULL) {
976 variant = shader->get_dummy_shader(svga, shader, key);
979 else if (svga_shader_too_large(svga, variant)) {
983 (unsigned)(variant->nr_tokens
984 * sizeof(variant->tokens[0])));
986 /* Free the too-large variant */
987 svga_destroy_shader_variant(svga, variant);
990 variant = shader->get_dummy_shader(svga, shader, key);
994 if (variant == NULL)
997 ret = svga_define_shader(svga, variant);
999 svga_destroy_shader_variant(svga, variant);
1003 *out_variant = variant;
1005 /* insert variant at head of linked list */
1006 variant->next = shader->variants;
1007 shader->variants = variant;