Skip to content

Commit 0133b93

Browse files
committed
Improve lovrPassGetShaderResourceType logic
1 parent cbcbd3f commit 0133b93

3 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/api/l_graphics_pass.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ static int l_lovrPassSend(lua_State* L) {
812812
}
813813

814814
size_t tex_count = 0;
815-
if (lovrPassGetShaderResourceType(pass, name, length, &tex_count) == SHADER_RES_TEXTURE) {
815+
if (lovrPassGetShaderResourceType(pass, name, length, &tex_count) == SHADER_RES_TEXTURE && tex_count > 0) {
816816
tex_count = MIN(luax_len(L, 3), tex_count);
817817
if (tex_count == 0) {
818818
return 0;

src/modules/graphics/graphics.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3967,18 +3967,30 @@ ShaderResourceType lovrPassGetShaderResourceType(Pass* pass, const char* name, s
39673967
if (!shader) {
39683968
return SHADER_RES_NONE;
39693969
}
3970-
39713970
ShaderResource* resource = findShaderResource(shader, name, length);
3972-
if (!resource || resource->arraySize == 0) {
3971+
if (!resource) {
39733972
return SHADER_RES_NONE;
39743973
}
3974+
39753975
if (outArraySize) *outArraySize = resource->arraySize;
3976-
if (resource->type == GPU_SLOT_STORAGE_BUFFER || resource->type == GPU_SLOT_STORAGE_BUFFER_DYNAMIC) {
3976+
3977+
switch(resource->type) {
3978+
case GPU_SLOT_UNIFORM_BUFFER:
3979+
case GPU_SLOT_STORAGE_BUFFER:
3980+
case GPU_SLOT_UNIFORM_BUFFER_DYNAMIC:
3981+
case GPU_SLOT_STORAGE_BUFFER_DYNAMIC:
39773982
return SHADER_RES_BUFFER;
3978-
} else if (resource->type == GPU_SLOT_TEXTURE_WITH_SAMPLER || resource->type == GPU_SLOT_SAMPLED_TEXTURE) {
3983+
case GPU_SLOT_SAMPLED_TEXTURE:
3984+
case GPU_SLOT_STORAGE_TEXTURE:
3985+
case GPU_SLOT_TEXTURE_WITH_SAMPLER:
39793986
return SHADER_RES_TEXTURE;
3987+
case GPU_SLOT_SAMPLER:
3988+
return SHADER_RES_SAMPLER;
3989+
case GPU_SLOT_TREE:
3990+
return SHADER_RES_TREE;
3991+
default:
3992+
return SHADER_RES_NONE;
39803993
}
3981-
return SHADER_RES_NONE;
39823994
}
39833995

39843996
void lovrShaderGetWorkgroupSize(Shader* shader, uint32_t size[3]) {

src/modules/graphics/graphics.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ typedef enum {
222222
SHADER_RES_NONE,
223223
SHADER_RES_TEXTURE,
224224
SHADER_RES_BUFFER,
225+
SHADER_RES_SAMPLER,
226+
SHADER_RES_TREE,
225227
} ShaderResourceType;
226228

227229
typedef struct {

0 commit comments

Comments
 (0)