mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-07 16:31:32 +00:00
[vulkan] Clean out the old vkparse support functions
Lots and lots of deletions.
This commit is contained in:
parent
05c17d7247
commit
f5e7d5fbbc
5 changed files with 10 additions and 941 deletions
|
@ -47,11 +47,11 @@
|
||||||
if (!type) {
|
if (!type) {
|
||||||
// pointer to opaque struct. Probably
|
// pointer to opaque struct. Probably
|
||||||
// VK_DEFINE_NON_DISPATCHABLE_HANDLE or VK_DEFINE_HANDLE
|
// VK_DEFINE_NON_DISPATCHABLE_HANDLE or VK_DEFINE_HANDLE
|
||||||
string createInfo = name + "CreateInfo";
|
//string createInfo = name + "CreateInfo";
|
||||||
id structObj = (id) Hash_Find (available_types, createInfo);
|
//id structObj = (id) Hash_Find (available_types, createInfo);
|
||||||
if (structObj) {
|
//if (structObj) {
|
||||||
[structObj addToQueue];
|
// [structObj addToQueue];
|
||||||
}
|
//}
|
||||||
} else if ([type class] == [Alias class]) {
|
} else if ([type class] == [Alias class]) {
|
||||||
type = [type resolveType];
|
type = [type resolveType];
|
||||||
if ([type class] == [Struct class]) {
|
if ([type class] == [Struct class]) {
|
||||||
|
|
|
@ -374,7 +374,7 @@ write_table (Struct *self, PLItem *field_dict, Array *field_defs,
|
||||||
if (have_pNext) {
|
if (have_pNext) {
|
||||||
fprintf (output_file,
|
fprintf (output_file,
|
||||||
"\t{\"@next\", field_offset (%s, pNext), "
|
"\t{\"@next\", field_offset (%s, pNext), "
|
||||||
"QFArray, parse_next, 0},", [self outname]);
|
"QFArray, parse_next, 0},\n", [self outname]);
|
||||||
}
|
}
|
||||||
for (int i = [field_defs count]; i-- > 0; ) {
|
for (int i = [field_defs count]; i-- > 0; ) {
|
||||||
FieldDef *field_def = [field_defs objectAtIndex:i];
|
FieldDef *field_def = [field_defs objectAtIndex:i];
|
||||||
|
|
|
@ -603,55 +603,6 @@ QFV_AddHandle (hashtab_t *tab, const char *name, uint64_t handle)
|
||||||
Hash_Add (tab, hr);
|
Hash_Add (tab, hr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
resource_path (vulkan_ctx_t *ctx, const char *prefix, const char *name)
|
|
||||||
{
|
|
||||||
if (name[0] != '$') {
|
|
||||||
if (prefix) {
|
|
||||||
name = va (ctx->va_ctx, "$"QFV_PROPERTIES".%s.%s", prefix, name);
|
|
||||||
} else {
|
|
||||||
name = va (ctx->va_ctx, "$"QFV_PROPERTIES".%s", name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
parse_VkRenderPass (const plitem_t *item, void **data,
|
|
||||||
plitem_t *messages, parsectx_t *pctx)
|
|
||||||
{
|
|
||||||
__auto_type handle = (VkRenderPass *) data[0];
|
|
||||||
int ret = 1;
|
|
||||||
exprctx_t ectx = *pctx->ectx;
|
|
||||||
vulkan_ctx_t *ctx = pctx->vctx;
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
|
|
||||||
const char *name = PL_String (item);
|
|
||||||
const char *path = resource_path (ctx, 0, name);
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "parse_VkRenderPass: %s\n", path);
|
|
||||||
|
|
||||||
*handle = (VkRenderPass) QFV_GetHandle (sctx->renderpasses, path);
|
|
||||||
if (*handle) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
plitem_t *setItem = 0;
|
|
||||||
exprval_t result = { &cexpr_plitem, &setItem };
|
|
||||||
ectx.result = &result;
|
|
||||||
ectx.item = item;
|
|
||||||
ret = !cexpr_eval_string (path, &ectx);
|
|
||||||
if (ret) {
|
|
||||||
VkRenderPass setLayout;
|
|
||||||
setLayout = QFV_ParseRenderPass (ctx, setItem, pctx->properties);
|
|
||||||
*handle = (VkRenderPass) setLayout;
|
|
||||||
|
|
||||||
// path not guaranteed to survive cexpr_eval_string due to va
|
|
||||||
path = resource_path (ctx, 0, name);
|
|
||||||
QFV_AddHandle (sctx->renderpasses, path, (uint64_t) setLayout);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
parse_VkShaderModule (const plitem_t *item, void **data,
|
parse_VkShaderModule (const plitem_t *item, void **data,
|
||||||
plitem_t *messages, parsectx_t *pctx)
|
plitem_t *messages, parsectx_t *pctx)
|
||||||
|
@ -677,81 +628,6 @@ parse_VkShaderModule (const plitem_t *item, void **data,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
parse_VkDescriptorSetLayout (const plfield_t *field, const plitem_t *item,
|
|
||||||
void *data, plitem_t *messages, void *context)
|
|
||||||
{
|
|
||||||
__auto_type handle = (VkDescriptorSetLayout *) data;
|
|
||||||
int ret = 1;
|
|
||||||
parsectx_t *pctx = context;
|
|
||||||
exprctx_t ectx = *pctx->ectx;
|
|
||||||
vulkan_ctx_t *ctx = pctx->vctx;
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
|
|
||||||
const char *name = PL_String (item);
|
|
||||||
const char *path = resource_path (ctx, "setLayouts", name);
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "parse_VkDescriptorSetLayout: %s\n",
|
|
||||||
path);
|
|
||||||
|
|
||||||
*handle = (VkDescriptorSetLayout) QFV_GetHandle (sctx->setLayouts, path);
|
|
||||||
if (*handle) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
plitem_t *setItem = 0;
|
|
||||||
exprval_t result = { &cexpr_plitem, &setItem };
|
|
||||||
ectx.result = &result;
|
|
||||||
ectx.item = item;
|
|
||||||
ret = !cexpr_eval_string (path, &ectx);
|
|
||||||
if (ret) {
|
|
||||||
VkDescriptorSetLayout setLayout;
|
|
||||||
setLayout = QFV_ParseDescriptorSetLayout (ctx, setItem,
|
|
||||||
pctx->properties);
|
|
||||||
*handle = (VkDescriptorSetLayout) setLayout;
|
|
||||||
|
|
||||||
// path not guaranteed to survive cexpr_eval_string due to va
|
|
||||||
path = resource_path (ctx, "setLayouts", name);
|
|
||||||
QFV_AddHandle (sctx->setLayouts, path, (uint64_t) setLayout);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
parse_VkPipelineLayout (const plitem_t *item, void **data,
|
|
||||||
plitem_t *messages, parsectx_t *pctx)
|
|
||||||
{
|
|
||||||
__auto_type handle = (VkPipelineLayout *) data[0];
|
|
||||||
int ret = 1;
|
|
||||||
exprctx_t ectx = *pctx->ectx;
|
|
||||||
vulkan_ctx_t *ctx = pctx->vctx;
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
|
|
||||||
const char *name = PL_String (item);
|
|
||||||
const char *path = resource_path (ctx, "pipelineLayouts", name);
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "parse_VkPipelineLayout: %s\n", path);
|
|
||||||
|
|
||||||
*handle = (VkPipelineLayout) QFV_GetHandle (sctx->pipelineLayouts, path);
|
|
||||||
if (*handle) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
plitem_t *setItem = 0;
|
|
||||||
exprval_t result = { &cexpr_plitem, &setItem };
|
|
||||||
ectx.result = &result;
|
|
||||||
ectx.item = item;
|
|
||||||
ret = !cexpr_eval_string (path, &ectx);
|
|
||||||
if (ret) {
|
|
||||||
VkPipelineLayout layout;
|
|
||||||
layout = QFV_ParsePipelineLayout (ctx, setItem, pctx->properties);
|
|
||||||
*handle = (VkPipelineLayout) layout;
|
|
||||||
|
|
||||||
// path not guaranteed to survive cexpr_eval_string due to va
|
|
||||||
path = resource_path (ctx, "pipelineLayouts", name);
|
|
||||||
QFV_AddHandle (sctx->pipelineLayouts, path, (uint64_t) layout);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
exprtype_t VkImage_type = {
|
exprtype_t VkImage_type = {
|
||||||
.name = "VkImage",
|
.name = "VkImage",
|
||||||
.size = sizeof (VkImage),
|
.size = sizeof (VkImage),
|
||||||
|
@ -768,94 +644,6 @@ exprtype_t VkImageView_type = {
|
||||||
.data = 0
|
.data = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
|
||||||
parse_VkImage (const plitem_t *item, void **data, plitem_t *messages,
|
|
||||||
parsectx_t *pctx)
|
|
||||||
{
|
|
||||||
__auto_type handle = (VkImage *) data[0];
|
|
||||||
int ret = 1;
|
|
||||||
exprctx_t ectx = *pctx->ectx;
|
|
||||||
vulkan_ctx_t *ctx = pctx->vctx;
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
|
|
||||||
const char *name = PL_String (item);
|
|
||||||
const char *path = resource_path (ctx, "images", name);
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "parse_VkImage: %s\n", path);
|
|
||||||
|
|
||||||
*handle = (VkImage) QFV_GetHandle (sctx->images, path);
|
|
||||||
if (*handle) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
exprval_t result = { };
|
|
||||||
ectx.result = &result;
|
|
||||||
ectx.item = item;
|
|
||||||
ret = !cexpr_eval_string (path, &ectx);
|
|
||||||
if (ret) {
|
|
||||||
if (result.type == &cexpr_plitem) {
|
|
||||||
plitem_t *imageItem = *(plitem_t **) result.value;
|
|
||||||
VkImage image;
|
|
||||||
image = QFV_ParseImage (ctx, imageItem, pctx->properties);
|
|
||||||
*handle = (VkImage) image;
|
|
||||||
|
|
||||||
// path not guaranteed to survive cexpr_eval_string due to va
|
|
||||||
path = resource_path (ctx, "images", name);
|
|
||||||
QFV_AddHandle (sctx->images, path, (uint64_t) image);
|
|
||||||
} else if (result.type == &VkImage_type) {
|
|
||||||
*handle = *(VkImage *) result.value;
|
|
||||||
} else {
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
parse_VkImageView (const plfield_t *field, const plitem_t *item, void *data,
|
|
||||||
plitem_t *messages, void *context)
|
|
||||||
{
|
|
||||||
parsectx_t *pctx = context;
|
|
||||||
__auto_type handle = (VkImageView *) data;
|
|
||||||
int ret = 1;
|
|
||||||
exprctx_t ectx = *pctx->ectx;
|
|
||||||
vulkan_ctx_t *ctx = pctx->vctx;
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
|
|
||||||
const char *name = PL_String (item);
|
|
||||||
const char *path = resource_path (ctx, "imageViews", name);
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "parse_VkImageView: %s\n", path);
|
|
||||||
|
|
||||||
*handle = (VkImageView) QFV_GetHandle (sctx->imageViews, path);
|
|
||||||
if (*handle) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
exprval_t *value = 0;
|
|
||||||
exprval_t result = { &cexpr_exprval, &value };
|
|
||||||
ectx.result = &result;
|
|
||||||
ectx.item = item;
|
|
||||||
ret = !cexpr_eval_string (path, &ectx);
|
|
||||||
|
|
||||||
plitem_t *imageViewItem = 0;
|
|
||||||
if (ret) {
|
|
||||||
VkImageView imageView;
|
|
||||||
if (value->type == &VkImageView_type) {
|
|
||||||
imageView = *(VkImageView *) value->value;
|
|
||||||
} else if (value->type == &cexpr_plitem) {
|
|
||||||
imageView = QFV_ParseImageView (ctx, imageViewItem,
|
|
||||||
pctx->properties);
|
|
||||||
// path not guaranteed to survive cexpr_eval_string due to va
|
|
||||||
path = resource_path (ctx, "imageViews", name);
|
|
||||||
QFV_AddHandle (sctx->imageViews, path, (uint64_t) imageView);
|
|
||||||
} else {
|
|
||||||
PL_Message (messages, item, "not a VkImageView");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*handle = (VkImageView) imageView;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
handleref_getkey (const void *hr, void *unused)
|
handleref_getkey (const void *hr, void *unused)
|
||||||
{
|
{
|
||||||
|
@ -1000,15 +788,6 @@ renderpass_free (void *hr, void *_ctx)
|
||||||
|
|
||||||
static hashtab_t *enum_symtab;
|
static hashtab_t *enum_symtab;
|
||||||
|
|
||||||
static int
|
|
||||||
parse_BasePipeline (const plitem_t *item, void **data,
|
|
||||||
plitem_t *messages, parsectx_t *pctx)
|
|
||||||
{
|
|
||||||
*(VkPipeline *) data = 0;
|
|
||||||
PL_Message (messages, item, "not implemented");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct data_array_s DARRAY_TYPE(byte) data_array_t;
|
typedef struct data_array_s DARRAY_TYPE(byte) data_array_t;
|
||||||
static void
|
static void
|
||||||
data_array (const exprval_t **params, exprval_t *result, exprctx_t *context)
|
data_array (const exprval_t **params, exprval_t *result, exprctx_t *context)
|
||||||
|
@ -1287,239 +1066,6 @@ parse_object (vulkan_ctx_t *ctx, memsuper_t *memsuper, plitem_t *plist,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkRenderPass
|
|
||||||
QFV_ParseRenderPass (vulkan_ctx_t *ctx, plitem_t *plist, plitem_t *properties)
|
|
||||||
{
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
|
|
||||||
VkRenderPassCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkRenderPassCreateInfo,
|
|
||||||
&cInfo, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkRenderPass renderpass;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseRenderPass: %d",
|
|
||||||
PL_Line (plist)));
|
|
||||||
dfunc->vkCreateRenderPass (device->dev, &cInfo, 0, &renderpass);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return renderpass;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkPipeline
|
|
||||||
QFV_ParseComputePipeline (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
|
|
||||||
__auto_type cInfo = QFV_AllocComputePipelineCreateInfoSet (1, alloca);
|
|
||||||
memset (&cInfo->a[0], 0, sizeof (cInfo->a[0]));
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkComputePipelineCreateInfo,
|
|
||||||
&cInfo->a[0], properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx,
|
|
||||||
"QFV_ParseComputePipeline: %d", PL_Line (plist)));
|
|
||||||
|
|
||||||
__auto_type plSet = QFV_CreateComputePipelines (device, 0, cInfo);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
VkPipeline pipeline = plSet->a[0];
|
|
||||||
free (plSet);
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkPipeline
|
|
||||||
QFV_ParseGraphicsPipeline (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
|
|
||||||
__auto_type cInfo = QFV_AllocGraphicsPipelineCreateInfoSet (1, alloca);
|
|
||||||
memset (&cInfo->a[0], 0, sizeof (cInfo->a[0]));
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkGraphicsPipelineCreateInfo,
|
|
||||||
&cInfo->a[0], properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx,
|
|
||||||
"QFV_ParsePipeline: %d", PL_Line (plist)));
|
|
||||||
|
|
||||||
__auto_type plSet = QFV_CreateGraphicsPipelines (device, 0, cInfo);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
VkPipeline pipeline = plSet->a[0];
|
|
||||||
free (plSet);
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkDescriptorPool
|
|
||||||
QFV_ParseDescriptorPool (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkDescriptorPoolCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkDescriptorPoolCreateInfo,
|
|
||||||
&cInfo, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkDescriptorPool pool;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseDescriptorPool: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreateDescriptorPool (device->dev, &cInfo, 0, &pool);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkDescriptorSetLayout
|
|
||||||
QFV_ParseDescriptorSetLayout (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkDescriptorSetLayoutCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist,
|
|
||||||
parse_VkDescriptorSetLayoutCreateInfo,
|
|
||||||
&cInfo, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkDescriptorSetLayout setLayout;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseDescriptorSetLayout: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreateDescriptorSetLayout (device->dev, &cInfo, 0, &setLayout);
|
|
||||||
QFV_duSetObjectName (device, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
|
|
||||||
setLayout, va (ctx->va_ctx, "descriptorSetLayout:%d",
|
|
||||||
PL_Line (plist)));
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return setLayout;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkPipelineLayout
|
|
||||||
QFV_ParsePipelineLayout (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkPipelineLayoutCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkPipelineLayoutCreateInfo,
|
|
||||||
&cInfo, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkPipelineLayout layout;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParsePipelineLayout: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreatePipelineLayout (device->dev, &cInfo, 0, &layout);
|
|
||||||
QFV_duSetObjectName (device, VK_OBJECT_TYPE_PIPELINE_LAYOUT,
|
|
||||||
layout, va (ctx->va_ctx, "pipelineLayout:%d",
|
|
||||||
PL_Line (plist)));
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSampler
|
|
||||||
QFV_ParseSampler (vulkan_ctx_t *ctx, plitem_t *plist, plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkSamplerCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkSamplerCreateInfo, &cInfo,
|
|
||||||
properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSampler sampler;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseSampler: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreateSampler (device->dev, &cInfo, 0, &sampler);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return sampler;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkImage
|
|
||||||
QFV_ParseImage (vulkan_ctx_t *ctx, plitem_t *plist, plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkImageCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkImageCreateInfo, &cInfo,
|
|
||||||
properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkImage image;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseImage: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreateImage (device->dev, &cInfo, 0, &image);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkImageView
|
|
||||||
QFV_ParseImageView (vulkan_ctx_t *ctx, plitem_t *plist, plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkImageViewCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkImageViewCreateInfo,
|
|
||||||
&cInfo, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkImageView imageView;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseImageView: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreateImageView (device->dev, &cInfo, 0, &imageView);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return imageView;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t count;
|
uint32_t count;
|
||||||
VkImageCreateInfo *info;
|
VkImageCreateInfo *info;
|
||||||
|
@ -1530,192 +1076,6 @@ typedef struct {
|
||||||
VkImageViewCreateInfo *info;
|
VkImageViewCreateInfo *info;
|
||||||
} imageviewcreate_t;
|
} imageviewcreate_t;
|
||||||
|
|
||||||
static plelement_t qfv_imagecreate_dict = {
|
|
||||||
QFDictionary,
|
|
||||||
sizeof (VkImageCreateInfo),
|
|
||||||
vkparse_alloc,
|
|
||||||
parse_VkImageCreateInfo,
|
|
||||||
};
|
|
||||||
|
|
||||||
static plelement_t qfv_imageviewcreate_dict = {
|
|
||||||
QFDictionary,
|
|
||||||
sizeof (VkImageViewCreateInfo),
|
|
||||||
vkparse_alloc,
|
|
||||||
parse_VkImageViewCreateInfo,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
|
||||||
parse_imagecreate_dict (const plfield_t *field, const plitem_t *item,
|
|
||||||
void *data, plitem_t *messages, void *context)
|
|
||||||
{
|
|
||||||
plfield_t f = { "images", 0, QFArray, parse_array,
|
|
||||||
&qfv_imagecreate_dict };
|
|
||||||
typedef struct arr_s DARRAY_TYPE(byte) arr_t;
|
|
||||||
arr_t *arr = 0;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if ((ret = PL_ParseLabeledArray (&f, item, &arr, messages, context))) {
|
|
||||||
imagecreate_t *imagecreate = data;
|
|
||||||
imagecreate->count = arr->size;
|
|
||||||
imagecreate->info = (VkImageCreateInfo *) arr->a;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
parse_imageviewcreate_dict (const plfield_t *field, const plitem_t *item,
|
|
||||||
void *data, plitem_t *messages, void *context)
|
|
||||||
{
|
|
||||||
plfield_t f = { "images", 0, QFArray, parse_array,
|
|
||||||
&qfv_imageviewcreate_dict };
|
|
||||||
typedef struct arr_s DARRAY_TYPE(byte) arr_t;
|
|
||||||
arr_t *arr = 0;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if ((ret = PL_ParseLabeledArray (&f, item, &arr, messages, context))) {
|
|
||||||
imageviewcreate_t *imageviewcreate = data;
|
|
||||||
imageviewcreate->count = arr->size;
|
|
||||||
imageviewcreate->info = (VkImageViewCreateInfo *) arr->a;
|
|
||||||
} else {
|
|
||||||
//FIXME leaky boat when succeeds
|
|
||||||
if (arr) {
|
|
||||||
free (arr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
qfv_imageset_t *
|
|
||||||
QFV_ParseImageSet (vulkan_ctx_t *ctx, plitem_t *item, plitem_t *properties)
|
|
||||||
{
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
imagecreate_t create = {};
|
|
||||||
|
|
||||||
pltype_t type = PL_Type (item);
|
|
||||||
|
|
||||||
if (type == QFDictionary) {
|
|
||||||
if (!parse_object (ctx, memsuper, item, parse_imagecreate_dict,
|
|
||||||
&create, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "Neither array nor dictionary: %d\n",
|
|
||||||
PL_Line (item));
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
__auto_type set = QFV_AllocImages (create.count, malloc);
|
|
||||||
for (uint32_t i = 0; i < create.count; i++) {
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseImageSet: %d", PL_Line (item)));
|
|
||||||
dfunc->vkCreateImage (device->dev, &create.info[i], 0, &set->a[i]);
|
|
||||||
|
|
||||||
const char *name = PL_KeyAtIndex (item, i);
|
|
||||||
QFV_duSetObjectName (device, VK_OBJECT_TYPE_IMAGE, set->a[i],
|
|
||||||
va (ctx->va_ctx, "image:%s", name));
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
name = resource_path (ctx, "images", name);
|
|
||||||
QFV_AddHandle (sctx->images, name, (uint64_t) set->a[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return set;
|
|
||||||
}
|
|
||||||
|
|
||||||
qfv_imageviewset_t *
|
|
||||||
QFV_ParseImageViewSet (vulkan_ctx_t *ctx, plitem_t *item,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
imageviewcreate_t create = {};
|
|
||||||
|
|
||||||
pltype_t type = PL_Type (item);
|
|
||||||
|
|
||||||
if (type == QFDictionary) {
|
|
||||||
if (!parse_object (ctx, memsuper, item, parse_imageviewcreate_dict,
|
|
||||||
&create, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Sys_Printf ("Neither array nor dictionary: %d\n", PL_Line (item));
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
__auto_type set = QFV_AllocImageViews (create.count, malloc);
|
|
||||||
for (uint32_t i = 0; i < create.count; i++) {
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseImageViewSet: %d", PL_Line (item)));
|
|
||||||
dfunc->vkCreateImageView (device->dev, &create.info[i], 0, &set->a[i]);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
|
|
||||||
const char *name = PL_KeyAtIndex (item, i);
|
|
||||||
name = resource_path (ctx, "imageViews", name);
|
|
||||||
QFV_AddHandle (sctx->imageViews, name, (uint64_t) set->a[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return set;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkFramebuffer
|
|
||||||
QFV_ParseFramebuffer (vulkan_ctx_t *ctx, plitem_t *plist, plitem_t *properties)
|
|
||||||
{
|
|
||||||
qfv_device_t *device = ctx->device;
|
|
||||||
qfv_devfuncs_t *dfunc = device->funcs;
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
|
|
||||||
VkFramebufferCreateInfo cInfo = {};
|
|
||||||
|
|
||||||
if (!parse_object (ctx, memsuper, plist, parse_VkFramebufferCreateInfo,
|
|
||||||
&cInfo, properties)) {
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkFramebuffer framebuffer;
|
|
||||||
qfvPushDebug (ctx, va (ctx->va_ctx, "QFV_ParseFramebuffer: %d", PL_Line (plist)));
|
|
||||||
dfunc->vkCreateFramebuffer (device->dev, &cInfo, 0, &framebuffer);
|
|
||||||
qfvPopDebug (ctx);
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "framebuffer, renderPass: %#zx, %#zx\n",
|
|
||||||
(size_t) framebuffer, (size_t) cInfo.renderPass);
|
|
||||||
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return framebuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
parse_rgba (const plfield_t *field, const plitem_t *item, void *data,
|
|
||||||
plitem_t *messages, void *context)
|
|
||||||
{
|
|
||||||
return parse_RGBA (item, &data, messages, context);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
QFV_ParseRGBA (vulkan_ctx_t *ctx, float *rgba, plitem_t *plist,
|
|
||||||
plitem_t *properties)
|
|
||||||
{
|
|
||||||
memsuper_t *memsuper = new_memsuper ();
|
|
||||||
int ret = 0;
|
|
||||||
vec4f_t color;
|
|
||||||
|
|
||||||
if (parse_object (ctx, memsuper, plist, parse_rgba, &color, properties)) {
|
|
||||||
memcpy (rgba, &color, sizeof (color));
|
|
||||||
ret = 1;
|
|
||||||
}
|
|
||||||
delete_memsuper (memsuper);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
QFV_ParseOutput (vulkan_ctx_t *ctx, qfv_output_t *output, plitem_t *plist,
|
QFV_ParseOutput (vulkan_ctx_t *ctx, qfv_output_t *output, plitem_t *plist,
|
||||||
plitem_t *properties)
|
plitem_t *properties)
|
||||||
|
@ -1886,23 +1246,6 @@ delete_configs (void)
|
||||||
free (builtin_plists);
|
free (builtin_plists);
|
||||||
}
|
}
|
||||||
|
|
||||||
static plitem_t *
|
|
||||||
qfv_load_pipeline (vulkan_ctx_t *ctx, const char *name)
|
|
||||||
{
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
if (!sctx->pipelineDef) {
|
|
||||||
sctx->pipelineDef = Vulkan_GetConfig (ctx, "quake_deferred");
|
|
||||||
}
|
|
||||||
|
|
||||||
plitem_t *item = sctx->pipelineDef;
|
|
||||||
if (!item || !(item = PL_ObjectForKey (item, name))) {
|
|
||||||
Sys_Printf ("error loading %s\n", name);
|
|
||||||
} else {
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "Found %s def\n", name);
|
|
||||||
}
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
plitem_t *
|
plitem_t *
|
||||||
Vulkan_GetConfig (vulkan_ctx_t *ctx, const char *name)
|
Vulkan_GetConfig (vulkan_ctx_t *ctx, const char *name)
|
||||||
{
|
{
|
||||||
|
@ -1997,32 +1340,6 @@ void Vulkan_Script_SetOutput (vulkan_ctx_t *ctx, qfv_output_t *output)
|
||||||
sctx->output = *output;
|
sctx->output = *output;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkSampler
|
|
||||||
Vulkan_CreateSampler (vulkan_ctx_t *ctx, const char *name)
|
|
||||||
{
|
|
||||||
scriptctx_t *sctx = ctx->script_context;
|
|
||||||
hashtab_t *tab = sctx->samplers;
|
|
||||||
const char *path;
|
|
||||||
path = va (ctx->va_ctx, "$"QFV_PROPERTIES".samplers.%s", name);
|
|
||||||
__auto_type sampler = (VkSampler) QFV_GetHandle (tab, path);
|
|
||||||
if (sampler) {
|
|
||||||
return sampler;
|
|
||||||
}
|
|
||||||
|
|
||||||
plitem_t *item = qfv_load_pipeline (ctx, "samplers");
|
|
||||||
if (!(item = PL_ObjectForKey (item, name))) {
|
|
||||||
Sys_Printf ("error loading sampler %s\n", name);
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
Sys_MaskPrintf (SYS_vulkan_parse, "Found sampler def %s\n", name);
|
|
||||||
}
|
|
||||||
sampler = QFV_ParseSampler (ctx, item, sctx->pipelineDef);
|
|
||||||
QFV_AddHandle (tab, path, (uint64_t) sampler);
|
|
||||||
QFV_duSetObjectName (ctx->device, VK_OBJECT_TYPE_SAMPLER, sampler,
|
|
||||||
va (ctx->va_ctx, "sampler:%s", name));
|
|
||||||
return sampler;
|
|
||||||
}
|
|
||||||
|
|
||||||
exprtab_t *
|
exprtab_t *
|
||||||
QFV_CreateSymtab (plitem_t *dict, const char *properties,
|
QFV_CreateSymtab (plitem_t *dict, const char *properties,
|
||||||
const char **extra_items, exprsym_t *extra_syms,
|
const char **extra_items, exprsym_t *extra_syms,
|
||||||
|
|
|
@ -42,38 +42,6 @@ exprenum_t *QFV_GetEnum (const char *name);
|
||||||
uint64_t QFV_GetHandle (struct hashtab_s *tab, const char *name);
|
uint64_t QFV_GetHandle (struct hashtab_s *tab, const char *name);
|
||||||
void QFV_AddHandle (struct hashtab_s *tab, const char *name, uint64_t handle);
|
void QFV_AddHandle (struct hashtab_s *tab, const char *name, uint64_t handle);
|
||||||
|
|
||||||
VkRenderPass QFV_ParseRenderPass (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkPipeline QFV_ParseComputePipeline (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkPipeline QFV_ParseGraphicsPipeline (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkDescriptorPool QFV_ParseDescriptorPool (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkDescriptorSetLayout QFV_ParseDescriptorSetLayout (vulkan_ctx_t *ctx,
|
|
||||||
plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkPipelineLayout QFV_ParsePipelineLayout (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkSampler QFV_ParseSampler (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkImage QFV_ParseImage (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkImageView QFV_ParseImageView (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
struct qfv_imageset_s *QFV_ParseImageSet (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
struct qfv_imageviewset_s *QFV_ParseImageViewSet (vulkan_ctx_t *ctx,
|
|
||||||
plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
VkFramebuffer QFV_ParseFramebuffer (vulkan_ctx_t *ctx, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
|
|
||||||
struct qfv_subpassset_s *QFV_ParseSubpasses (vulkan_ctx_t *ctx,
|
|
||||||
plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
int QFV_ParseRGBA (vulkan_ctx_t *ctx, float *rgba, plitem_t *plist,
|
|
||||||
plitem_t *properties);
|
|
||||||
int QFV_ParseOutput (vulkan_ctx_t *ctx, qfv_output_t *output, plitem_t *plist,
|
int QFV_ParseOutput (vulkan_ctx_t *ctx, qfv_output_t *output, plitem_t *plist,
|
||||||
plitem_t *properties);
|
plitem_t *properties);
|
||||||
exprtab_t *QFV_CreateSymtab (plitem_t *dict, const char *properties,
|
exprtab_t *QFV_CreateSymtab (plitem_t *dict, const char *properties,
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
search = (
|
search = (
|
||||||
VkAttachmentDescription,
|
|
||||||
VkDebugUtilsMessageSeverityFlagBitsEXT,
|
VkDebugUtilsMessageSeverityFlagBitsEXT,
|
||||||
VkPresentModeKHR,
|
VkPresentModeKHR,
|
||||||
VkSubpassDescription,
|
|
||||||
VkSubpassDependency,
|
|
||||||
VkSpecializationInfo,
|
VkSpecializationInfo,
|
||||||
VkPipelineShaderStageCreateInfo,
|
VkPipelineShaderStageCreateInfo,
|
||||||
VkPipelineVertexInputStateCreateInfo,
|
VkPipelineVertexInputStateCreateInfo,
|
||||||
|
@ -15,19 +12,8 @@ search = (
|
||||||
VkPipelineColorBlendStateCreateInfo,
|
VkPipelineColorBlendStateCreateInfo,
|
||||||
VkPipelineDynamicStateCreateInfo,
|
VkPipelineDynamicStateCreateInfo,
|
||||||
VkDescriptorSetLayoutBinding,
|
VkDescriptorSetLayoutBinding,
|
||||||
VkDescriptorSetLayoutCreateInfo,
|
|
||||||
VkPushConstantRange,
|
|
||||||
VkPipelineLayoutCreateInfo,
|
|
||||||
VkGraphicsPipelineCreateInfo,
|
|
||||||
VkComputePipelineCreateInfo,
|
|
||||||
VkDescriptorPoolCreateInfo,
|
|
||||||
VkSamplerCreateInfo,
|
|
||||||
VkImageCreateInfo,
|
|
||||||
VkImageViewCreateInfo,
|
|
||||||
VkFramebufferCreateInfo,
|
|
||||||
VkClearValue,
|
VkClearValue,
|
||||||
VkPhysicalDeviceLimits,
|
VkPhysicalDeviceLimits,
|
||||||
VkRenderPassCreateInfo,
|
|
||||||
VkRenderPassMultiviewCreateInfo,
|
VkRenderPassMultiviewCreateInfo,
|
||||||
|
|
||||||
qfv_output_t,
|
qfv_output_t,
|
||||||
|
@ -58,53 +44,7 @@ search = (
|
||||||
qfv_samplerinfo_t,
|
qfv_samplerinfo_t,
|
||||||
);
|
);
|
||||||
parse = {
|
parse = {
|
||||||
VkSubpassDescription = {
|
|
||||||
flags = auto;
|
|
||||||
pipelineBindPoint = auto;
|
|
||||||
inputAttachments = {
|
|
||||||
type = (array, VkAttachmentReference);
|
|
||||||
size = inputAttachmentCount;
|
|
||||||
values = pInputAttachments;
|
|
||||||
};
|
|
||||||
colorAttachments = {
|
|
||||||
type = (array, VkAttachmentReference);
|
|
||||||
size = colorAttachmentCount;
|
|
||||||
values = pColorAttachments;
|
|
||||||
};
|
|
||||||
resolveAttachments = {
|
|
||||||
type = (array, VkAttachmentReference);
|
|
||||||
values = pResolveAttachments;
|
|
||||||
matchSize = colorAttachments;
|
|
||||||
};
|
|
||||||
depthStencilAttachment = {
|
|
||||||
type = (single, VkAttachmentReference);
|
|
||||||
value = pDepthStencilAttachment;
|
|
||||||
};
|
|
||||||
preserveAttachments = {
|
|
||||||
type = (array, uint32_t);
|
|
||||||
size = preserveAttachmentCount;
|
|
||||||
values = pPreserveAttachments;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
VkPhysicalDeviceLimits = readonly;
|
VkPhysicalDeviceLimits = readonly;
|
||||||
VkRenderPassCreateInfo = {
|
|
||||||
//flags = auto; reserved for future use (Bits enum does not exist)
|
|
||||||
attachments = {
|
|
||||||
type = (array, VkAttachmentDescription);
|
|
||||||
size = attachmentCount;
|
|
||||||
values = pAttachments;
|
|
||||||
};
|
|
||||||
subpasses = {
|
|
||||||
type = (array, VkSubpassDescription);
|
|
||||||
size = subpassCount;
|
|
||||||
values = pSubpasses;
|
|
||||||
};
|
|
||||||
dependencies = {
|
|
||||||
type = (array, VkSubpassDependency);
|
|
||||||
size = dependencyCount;
|
|
||||||
values = pDependencies;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
VkSpecializationInfo = {
|
VkSpecializationInfo = {
|
||||||
mapEntries = {
|
mapEntries = {
|
||||||
type = (array, VkSpecializationMapEntry);
|
type = (array, VkSpecializationMapEntry);
|
||||||
|
@ -141,23 +81,6 @@ parse = {
|
||||||
stageFlags = auto;
|
stageFlags = auto;
|
||||||
// skip pImmutableSamplers (default to 0) until I know how it works
|
// skip pImmutableSamplers (default to 0) until I know how it works
|
||||||
};
|
};
|
||||||
VkDescriptorSetLayoutCreateInfo = {
|
|
||||||
flags = auto;
|
|
||||||
bindings = {
|
|
||||||
type = (array, VkDescriptorSetLayoutBinding);
|
|
||||||
size = bindingCount;
|
|
||||||
values = pBindings;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
VkDescriptorPoolCreateInfo = {
|
|
||||||
flags = auto;
|
|
||||||
maxSets = auto;
|
|
||||||
bindings = {
|
|
||||||
type = (array, VkDescriptorPoolSize);
|
|
||||||
size = poolSizeCount;
|
|
||||||
values = pPoolSizes;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
VkPipelineVertexInputStateCreateInfo = {
|
VkPipelineVertexInputStateCreateInfo = {
|
||||||
//flags = auto; reserved for future use (Bits enum does not exist)
|
//flags = auto; reserved for future use (Bits enum does not exist)
|
||||||
bindings = {
|
bindings = {
|
||||||
|
@ -246,140 +169,10 @@ parse = {
|
||||||
values = pDynamicStates;
|
values = pDynamicStates;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
VkPipelineLayoutCreateInfo = {
|
|
||||||
//flags = auto; reserved for future use (Bits enum does not exist)
|
|
||||||
setLayouts = {
|
|
||||||
type = (array, {
|
|
||||||
parse_type = (QFDictionary, QFString);
|
|
||||||
type = VkDescriptorSetLayout;
|
|
||||||
parser = parse_VkDescriptorSetLayout;
|
|
||||||
});
|
|
||||||
size = setLayoutCount;
|
|
||||||
values = pSetLayouts;
|
|
||||||
};
|
|
||||||
pushConstantRanges = {
|
|
||||||
type = (array, VkPushConstantRange);
|
|
||||||
size = pushConstantRangeCount;
|
|
||||||
values = pPushConstantRanges;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
VkPipelineTessellationStateCreateInfo = {
|
VkPipelineTessellationStateCreateInfo = {
|
||||||
//flags = auto; reserved for future use (Bits enum does not exist)
|
//flags = auto; reserved for future use (Bits enum does not exist)
|
||||||
patchControlPoints = auto;
|
patchControlPoints = auto;
|
||||||
};
|
};
|
||||||
VkGraphicsPipelineCreateInfo = {
|
|
||||||
flags = auto;
|
|
||||||
stages = {
|
|
||||||
type = (array, VkPipelineShaderStageCreateInfo);
|
|
||||||
size = stageCount;
|
|
||||||
values = pStages;
|
|
||||||
};
|
|
||||||
vertexInput = {
|
|
||||||
type = (single, VkPipelineVertexInputStateCreateInfo);
|
|
||||||
value = pVertexInputState;
|
|
||||||
};
|
|
||||||
inputAssembly = {
|
|
||||||
type = (single, VkPipelineInputAssemblyStateCreateInfo);
|
|
||||||
value = pInputAssemblyState;
|
|
||||||
};
|
|
||||||
tessellation = {
|
|
||||||
type = (single, VkPipelineTessellationStateCreateInfo);
|
|
||||||
value = pTessellationState;
|
|
||||||
};
|
|
||||||
viewport = {
|
|
||||||
type = (single, VkPipelineViewportStateCreateInfo);
|
|
||||||
value = pViewportState;
|
|
||||||
};
|
|
||||||
rasterization = {
|
|
||||||
type = (single, VkPipelineRasterizationStateCreateInfo);
|
|
||||||
value = pRasterizationState;
|
|
||||||
};
|
|
||||||
multisample = {
|
|
||||||
type = (single, VkPipelineMultisampleStateCreateInfo);
|
|
||||||
value = pMultisampleState;
|
|
||||||
};
|
|
||||||
depthStencil = {
|
|
||||||
type = (single, VkPipelineDepthStencilStateCreateInfo);
|
|
||||||
value = pDepthStencilState;
|
|
||||||
};
|
|
||||||
colorBlend = {
|
|
||||||
type = (single, VkPipelineColorBlendStateCreateInfo);
|
|
||||||
value = pColorBlendState;
|
|
||||||
};
|
|
||||||
dynamic = {
|
|
||||||
type = (single, VkPipelineDynamicStateCreateInfo);
|
|
||||||
value = pDynamicState;
|
|
||||||
};
|
|
||||||
layout = {
|
|
||||||
type = (custom, QFString, parse_VkPipelineLayout);
|
|
||||||
fields = (layout);
|
|
||||||
};
|
|
||||||
renderPass = {
|
|
||||||
type = (custom, QFString, parse_VkRenderPass);
|
|
||||||
fields = (renderPass);
|
|
||||||
};
|
|
||||||
subpass = auto;
|
|
||||||
basePipelineHandle = {
|
|
||||||
type = (custom, QFString, parse_BasePipeline);
|
|
||||||
fields = (basePipelineHandle);
|
|
||||||
};
|
|
||||||
basePipelineIndex = auto;
|
|
||||||
};
|
|
||||||
VkComputePipelineCreateInfo = {
|
|
||||||
flags = auto;
|
|
||||||
stage = auto;
|
|
||||||
layout = {
|
|
||||||
type = (custom, QFString, parse_VkPipelineLayout);
|
|
||||||
fields = (layout);
|
|
||||||
};
|
|
||||||
basePipelineHandle = {
|
|
||||||
type = (custom, QFString, parse_BasePipeline);
|
|
||||||
fields = (basePipelineHandle);
|
|
||||||
};
|
|
||||||
basePipelineIndex = auto;
|
|
||||||
};
|
|
||||||
VkImageCreateInfo = {
|
|
||||||
flags = auto;
|
|
||||||
imageType = auto;
|
|
||||||
format = auto;
|
|
||||||
extent = auto;
|
|
||||||
mipLevels = auto;
|
|
||||||
arrayLayers = auto;
|
|
||||||
samples = auto;
|
|
||||||
tiling = auto;
|
|
||||||
usage = auto;
|
|
||||||
sharingMode = skip; // FIXME for now
|
|
||||||
queueFamilyIndexCount = skip; // FIXME for now
|
|
||||||
pQueueFamilyIndices = skip; // FIXME for now
|
|
||||||
initialLayout = auto;
|
|
||||||
};
|
|
||||||
VkImageViewCreateInfo = {
|
|
||||||
flags = auto;
|
|
||||||
image = {
|
|
||||||
type = (custom, (QFDictionary, QFString),
|
|
||||||
parse_VkImage);
|
|
||||||
fields = (image);
|
|
||||||
};
|
|
||||||
viewType = auto;
|
|
||||||
format = auto;
|
|
||||||
components = auto;
|
|
||||||
subresourceRange = auto;
|
|
||||||
};
|
|
||||||
VkFramebufferCreateInfo = {
|
|
||||||
//flags = auto; reserved for future use (Bits enum does not exist)
|
|
||||||
renderPass = {
|
|
||||||
type = (custom, QFString, parse_VkRenderPass);
|
|
||||||
fields = (renderPass);
|
|
||||||
};
|
|
||||||
attachments = {
|
|
||||||
type = (array, VkImageView);
|
|
||||||
size = attachmentCount;
|
|
||||||
values = pAttachments;
|
|
||||||
};
|
|
||||||
width = auto;
|
|
||||||
height = auto;
|
|
||||||
layers = auto;
|
|
||||||
};
|
|
||||||
VkClearColorValue = skip;
|
VkClearColorValue = skip;
|
||||||
VkClearValue = {
|
VkClearValue = {
|
||||||
color = {
|
color = {
|
||||||
|
@ -406,28 +199,19 @@ parse = {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
qfv_osubpass_s = {
|
|
||||||
.name = qfv_osubpass_t;
|
|
||||||
color = {
|
|
||||||
type = (custom, QFString, parse_RGBA);
|
|
||||||
fields = (color);
|
|
||||||
};
|
|
||||||
name = {
|
|
||||||
type = string;
|
|
||||||
string = name;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
qfv_output_s = {
|
qfv_output_s = {
|
||||||
.name = qfv_output_t;
|
.name = qfv_output_t;
|
||||||
extent = auto;
|
extent = auto;
|
||||||
image = {
|
image = ignore;
|
||||||
|
view = ignore;
|
||||||
|
/* image = {
|
||||||
type = (readonly, VkImage);
|
type = (readonly, VkImage);
|
||||||
value = image;
|
value = image;
|
||||||
};
|
};
|
||||||
view = {
|
view = {
|
||||||
type = (readonly, VkImageView);
|
type = (readonly, VkImageView);
|
||||||
value = view;
|
value = view;
|
||||||
};
|
};*/
|
||||||
format = auto;
|
format = auto;
|
||||||
frames = auto;
|
frames = auto;
|
||||||
finalLayout = auto;
|
finalLayout = auto;
|
||||||
|
|
Loading…
Reference in a new issue