mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
vk/meta: Add a magic GLSL shader source macro
This commit is contained in:
parent
018a0c1741
commit
79ace6def6
2 changed files with 43 additions and 36 deletions
37
src/vulkan/glsl_helpers.h
Normal file
37
src/vulkan/glsl_helpers.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright © 2015 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define GLSL_VK_SHADER(device, stage, ...) ({ \
|
||||
VkShader __shader; \
|
||||
const char __src[] = "#version 330\n" STRINGIFY((__ARGV__)); \
|
||||
VkShaderCreateInfo __shader_create_info = { \
|
||||
.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO, \
|
||||
.codeSize = sizeof(__src), \
|
||||
.pCode = __src, \
|
||||
.flags = (1 << 31) /* GLSL back-door hack */ \
|
||||
}; \
|
||||
vkCreateShader((VkDevice) device, &__shader_create_info, &__shader); \
|
||||
__shader; \
|
||||
})
|
||||
|
|
@ -28,8 +28,7 @@
|
|||
#include <fcntl.h>
|
||||
|
||||
#include "private.h"
|
||||
|
||||
#define GLSL(src) "#version 330\n" #src
|
||||
#include "glsl_helpers.h"
|
||||
|
||||
static void
|
||||
anv_device_init_meta_clear_state(struct anv_device *device)
|
||||
|
|
@ -45,23 +44,14 @@ anv_device_init_meta_clear_state(struct anv_device *device)
|
|||
/* We don't use a vertex shader for clearing, but instead build and pass
|
||||
* the VUEs directly to the rasterization backend.
|
||||
*/
|
||||
static const char fs_source[] = GLSL(
|
||||
VkShader fs = GLSL_VK_SHADER(device, FRAGMENT,
|
||||
out vec4 f_color;
|
||||
flat in vec4 v_color;
|
||||
void main()
|
||||
{
|
||||
f_color = v_color;
|
||||
});
|
||||
|
||||
VkShader fs;
|
||||
vkCreateShader((VkDevice) device,
|
||||
&(VkShaderCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO,
|
||||
.codeSize = sizeof(fs_source),
|
||||
.pCode = fs_source,
|
||||
.flags = 0
|
||||
},
|
||||
&fs);
|
||||
}
|
||||
);
|
||||
|
||||
VkPipelineShaderStageCreateInfo fs_create_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
||||
|
|
@ -300,7 +290,7 @@ anv_device_init_meta_blit_state(struct anv_device *device)
|
|||
* to provide GLSL source for the vertex shader so that the compiler
|
||||
* does not dead-code our inputs.
|
||||
*/
|
||||
static const char vs_source[] = GLSL(
|
||||
VkShader vs = GLSL_VK_SHADER(device, VERTEX,
|
||||
in vec2 a_pos;
|
||||
in vec2 a_tex_coord;
|
||||
out vec4 v_tex_coord;
|
||||
|
|
@ -311,7 +301,7 @@ anv_device_init_meta_blit_state(struct anv_device *device)
|
|||
}
|
||||
);
|
||||
|
||||
static const char fs_source[] = GLSL(
|
||||
VkShader fs = GLSL_VK_SHADER(device, FRAGMENT,
|
||||
out vec4 f_color;
|
||||
in vec4 v_tex_coord;
|
||||
layout(set = 0, index = 0) uniform sampler2D u_tex;
|
||||
|
|
@ -321,26 +311,6 @@ anv_device_init_meta_blit_state(struct anv_device *device)
|
|||
}
|
||||
);
|
||||
|
||||
VkShader vs;
|
||||
vkCreateShader((VkDevice) device,
|
||||
&(VkShaderCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO,
|
||||
.codeSize = sizeof(vs_source),
|
||||
.pCode = vs_source,
|
||||
.flags = 0
|
||||
},
|
||||
&vs);
|
||||
|
||||
VkShader fs;
|
||||
vkCreateShader((VkDevice) device,
|
||||
&(VkShaderCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO,
|
||||
.codeSize = sizeof(fs_source),
|
||||
.pCode = fs_source,
|
||||
.flags = 0
|
||||
},
|
||||
&fs);
|
||||
|
||||
VkPipelineShaderStageCreateInfo vs_create_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
||||
.pNext = &ia_create_info,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue