mirror of https://github.com/bjornbytes/lovr.git
Enforce maximum spirv version;
This commit is contained in:
parent
a2cc4f3495
commit
ab04577495
|
@ -68,6 +68,8 @@ spv_result spv_parse(const void* source, uint32_t size, spv_info* info) {
|
||||||
return SPV_INVALID;
|
return SPV_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
info->version = spv.words[1];
|
||||||
|
|
||||||
spv.bound = spv.words[3];
|
spv.bound = spv.words[3];
|
||||||
|
|
||||||
if (spv.bound >= 0xffff) {
|
if (spv.bound >= 0xffff) {
|
||||||
|
|
|
@ -50,6 +50,7 @@ typedef struct {
|
||||||
} spv_resource;
|
} spv_resource;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint32_t version;
|
||||||
uint32_t inputLocationMask;
|
uint32_t inputLocationMask;
|
||||||
uint32_t featureCount;
|
uint32_t featureCount;
|
||||||
uint32_t specConstantCount;
|
uint32_t specConstantCount;
|
||||||
|
|
|
@ -1024,6 +1024,7 @@ Shader* lovrShaderCreate(ShaderInfo* info) {
|
||||||
for (uint32_t i = 0; i < stageCount; i++) {
|
for (uint32_t i = 0; i < stageCount; i++) {
|
||||||
result = spv_parse(info->stages[i]->data, info->stages[i]->size, &spv[i]);
|
result = spv_parse(info->stages[i]->data, info->stages[i]->size, &spv[i]);
|
||||||
lovrCheck(result == SPV_OK, "Failed to load Shader: %s\n", spv_result_to_string(result));
|
lovrCheck(result == SPV_OK, "Failed to load Shader: %s\n", spv_result_to_string(result));
|
||||||
|
lovrCheck(spv[i].version <= 0x00010300, "Invalid SPIR-V version (up to 1.3 is supported)");
|
||||||
|
|
||||||
spv[i].features = tempAlloc(spv[i].featureCount * sizeof(uint32_t));
|
spv[i].features = tempAlloc(spv[i].featureCount * sizeof(uint32_t));
|
||||||
spv[i].specConstants = tempAlloc(spv[i].specConstantCount * sizeof(spv_spec_constant));
|
spv[i].specConstants = tempAlloc(spv[i].specConstantCount * sizeof(spv_spec_constant));
|
||||||
|
|
Loading…
Reference in New Issue