Well, I am pretty sure I was wrong about something. Turning of the garbage 
collector results in no error. Any smart ideas for debugging this?

On Sunday, December 18, 2016 at 4:20:25 PM UTC+1, Florian Uekermann wrote:
>
> I may be misdiagnosing the problem, but I think go is doing a problematic 
> check of the value of C pointer types pointers.
>
> The following runtime error is reproducible, but does not always happen in 
> a program:
>
> runtime: writebarrierptr *0xc420326a90 = 0x12 
> fatal error: bad pointer in write barrier
>
> The stack trace indicates that the offending line is the last one in the 
> following snippet:
>
> var bi C.VkRenderPassBeginInfo
> bi.sType = C.VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
> bi.renderPass = renderpass
>
> I checked the address of the .renderPass field and it is indeed 0xc420326a90 
> and the value
> of renderpass is 18. As you may have recognized by now, I am using the vulkan 
> C bindings.
> The .renderPass field has type C.VkRenderPass. A quick look at vulkan.h 
> yields the following:
>
> #if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || 
> defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || 
> defined(__aarch64__) || defined(__powerpc64__)
>         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct 
> object##_T *object;
> #else
>         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t 
> object;
> #endif
> ...
>
> VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
>
>
> So it seems to me that Vulkan uses a pointer type  on 64bit archs to 
> store a (potentially non-pointer) handle.
> Given that structs with these handles are very common, the workaround of 
> allocating the bi variable on the C heap
> is a lot of unnecessary work and a bit of a performance issue.
>
> I am not quite sure what a writebarrier is in this context, so I am not 
> sure if deactivating this check creates more issue (GC)?
>
> Can someone give some insight into what the long-term options are for go 
> with respect to this?
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to